diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+Copyright (c) 2009, Jonathan Daugherty.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+    * The names of the contributors may not be used to endorse or
+      promote products derived from this software without specific
+      prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/dbmigrations-postgresql.cabal b/dbmigrations-postgresql.cabal
new file mode 100644
--- /dev/null
+++ b/dbmigrations-postgresql.cabal
@@ -0,0 +1,65 @@
+Name:                dbmigrations-postgresql
+Version:             2.0.0
+Synopsis:            The dbmigrations tool built for PostgreSQL databases
+Description:         This package contains the executable to work with
+                     the dbmigrations package when the database backend
+                     is PostgreSQL. See the package dbmigrations for details
+                     about the dbmigrations project in general.
+
+                     To get started, see the 'README.md'
+                     (https://github.com/jtdaugherty/dbmigrations/blob/master/README.md)
+                     and 'MOO.TXT'
+                     (https://github.com/jtdaugherty/dbmigrations/blob/master/MOO.TXT)
+                     files included in the dbmigrations package and the
+                     usage output for the 'moo-postgresql' command.
+
+Category:            Database
+Author:              Jonathan Daugherty <cygnus@foobox.com>
+Maintainer:          Jonathan Daugherty <cygnus@foobox.com>
+Build-Type:          Simple
+License:             BSD3
+License-File:        LICENSE
+Cabal-Version:       >= 1.10
+
+Source-Repository head
+  type:     git
+  location: git://github.com/jtdaugherty/dbmigrations-postgresql.git
+
+Executable moo-postgresql
+  default-language: Haskell2010
+  Build-Depends:
+    base >= 4 && < 5,
+    dbmigrations >= 2,
+    HDBC-postgresql
+
+  if impl(ghc >= 6.12.0)
+    ghc-options: -threaded -Wall -fwarn-tabs -funbox-strict-fields
+                 -fno-warn-unused-do-bind
+  else
+    ghc-options: -threaded -Wall -fwarn-tabs -funbox-strict-fields
+
+  Hs-Source-Dirs:  programs
+  Main-is:         MooPostgreSQL.hs
+
+test-suite dbmigrations-postgresql-tests
+  default-language: Haskell2010
+  type: exitcode-stdio-1.0
+  Build-Depends:
+    base >= 4 && < 5,
+    dbmigrations >= 2,
+    HDBC >= 2.2.1,
+    HDBC-postgresql == 2.3.2.4,
+    process >= 1.1,
+    HUnit >= 1.2
+
+  other-modules:
+    TestDriver
+
+  if impl(ghc >= 6.12.0)
+    ghc-options: -threaded -Wall -fwarn-tabs -funbox-strict-fields
+                 -fno-warn-unused-do-bind -Wwarn
+  else
+    ghc-options: -threaded -Wall -fwarn-tabs -funbox-strict-fields
+
+  Hs-Source-Dirs:  test
+  Main-is:         TestDriver.hs
diff --git a/programs/MooPostgreSQL.hs b/programs/MooPostgreSQL.hs
new file mode 100644
--- /dev/null
+++ b/programs/MooPostgreSQL.hs
@@ -0,0 +1,28 @@
+module Main
+    ( main
+    )
+where
+
+import Database.HDBC.PostgreSQL (connectPostgreSQL)
+import Prelude  hiding (lookup)
+import System.Environment (getArgs)
+import System.Exit
+
+import Database.Schema.Migrations.Backend.HDBC (hdbcBackend)
+import Moo.Core
+import Moo.Main
+
+main :: IO ()
+main = do
+  args <- getArgs
+  (_, opts, _) <- procArgs args
+  loadedConf <- loadConfiguration $ _configFilePath opts
+  case loadedConf of
+    Left e -> putStrLn e >> exitFailure
+    Right conf -> do
+      let connectionString = _connectionString conf
+      connection <- connectPostgreSQL connectionString
+      let backend = hdbcBackend connection
+          parameters = makeParameters conf backend
+      mainWithParameters args parameters
+
diff --git a/test/TestDriver.hs b/test/TestDriver.hs
new file mode 100644
--- /dev/null
+++ b/test/TestDriver.hs
@@ -0,0 +1,75 @@
+{-# LANGUAGE ExistentialQuantification #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+module Main where
+
+import Database.Schema.Migrations.Backend.HDBC (hdbcBackend)
+import Database.Schema.Migrations.Test.BackendTest as BackendTest
+
+import Control.Exception (catch, catches, finally, Handler(..), SomeException )
+import Database.HDBC ( IConnection(disconnect) )
+import qualified Database.HDBC as HDBC
+import qualified Database.HDBC.PostgreSQL as PostgreSQL
+import System.Exit
+import System.IO ( stderr )
+import System.Process ( system )
+import Test.HUnit
+
+data PostgreSQLBackendConnection =
+    forall a. HDBC.IConnection a => HDBCConnection a
+
+instance BackendConnection PostgreSQLBackendConnection where
+    supportsTransactionalDDL = const True
+    makeBackend (HDBCConnection c) = hdbcBackend c
+    commit (HDBCConnection c) = HDBC.commit c
+    withTransaction (HDBCConnection c) transaction =
+        HDBC.withTransaction c (transaction . HDBCConnection)
+    getTables (HDBCConnection c) = HDBC.getTables c
+    catchAll (HDBCConnection _) act handler =
+        act `catches` [ Handler (\(_ :: HDBC.SqlError) -> handler) ]
+
+
+loadTests :: IO [Test]
+loadTests = do
+
+  pgConn <- setupPostgresDb
+
+  let backendConnection :: PostgreSQLBackendConnection = HDBCConnection pgConn
+      testAct = (BackendTest.tests backendConnection)
+                `finally`
+                (disconnect pgConn >> teardownPostgresDb)
+  return [ ("PostgreSQL backend tests") ~: test testAct ]
+
+tempDatabase :: String
+tempDatabase = "dbmigrations_test"
+
+ignoreException :: SomeException -> IO ()
+ignoreException _ = return ()
+
+setupPostgresDb :: IO PostgreSQL.Connection
+setupPostgresDb = do
+  teardownPostgresDb `catch` ignoreException
+
+  -- create database
+  status <- system $ "createdb " ++ tempDatabase
+  case status of
+    ExitSuccess -> return ()
+    ExitFailure _ -> error $ "Failed to create PostgreSQL database " ++ (show tempDatabase)
+
+  -- return test db connection
+  PostgreSQL.connectPostgreSQL $ "dbname=" ++ tempDatabase
+
+teardownPostgresDb :: IO ()
+teardownPostgresDb = do
+  -- drop database
+  status <- system $ "dropdb " ++ tempDatabase ++ " 2>/dev/null"
+  case status of
+    ExitSuccess -> return ()
+    ExitFailure _ -> error $ "Failed to drop PostgreSQL database " ++ (show tempDatabase)
+
+main :: IO ()
+main = do
+  tests_ <- loadTests
+  (testResults, _) <- runTestText (putTextToHandle stderr False) $ test tests_
+  if errors testResults + failures testResults > 0
+    then exitFailure
+    else exitSuccess
