    {- |
       Module     : Database.HDBC.PostgreSQL
       Copyright  : Copyright (C) 2005-2011 John Goerzen
       License    : BSD3

       Maintainer : John Goerzen <jgoerzen@complete.org>
       Stability  : provisional
       Portability: portable

    HDBC driver interface for PostgreSQL 8.x

    Written by John Goerzen, jgoerzen\@complete.org

    /NOTE ON DATES AND TIMES/

    The recommended correspondence between PostgreSQL date and time types and HDBC SqlValue
    types is:

    * SqlLocalDate: DATE

    * SqlLocalTimeOfDay: TIME WITHOUT TIME ZONE

    * SqlZonedLocalTimeOfDay: TIME WITH TIME ZONE

    * SqlLocalTime: TIMESTAMP WITHOUT TIME ZONE

    * SqlZonedTime: TIMESTAMP WITH TIME ZONE

    * SqlUTCTime: TIMESTAMP WITH TIME ZONE

    * SqlDiffTime: INTERVAL

    * SqlPOSIXTime: NUMERIC

    * SqlEpochTime: INTEGER

    * SqlTimeDiff: INTERVAL

    Other combinations are possible, and may even be converted automatically.
    The above simply represents the types that seem the most logical correspondence,
    and thus are tested by the HDBC-PostgreSQL test suite.

    -}

    module Database.HDBC.PostgreSQL
        (
         -- * Connecting to Databases
         connectPostgreSQL, withPostgreSQL,
         connectPostgreSQL', withPostgreSQL',
         Connection,

         -- * Transactions
         begin,

         -- * PostgreSQL Error Codes
         --
         -- |When an @SqlError@ is thrown, the field @seState@ is set to one of the following
         -- error codes.
         module Database.HDBC.PostgreSQL.ErrorCodes,

         -- * Threading
         -- $threading
        )

    where

    import Database.HDBC.PostgreSQL.Connection(connectPostgreSQL, withPostgreSQL,
                                               connectPostgreSQL', withPostgreSQL',
                                               begin, Connection())
    import Database.HDBC.PostgreSQL.ErrorCodes

    {- $threading

       Provided the local libpq library is thread-safe, multiple 'Connection's may be used
       to have concurrent database queries.  Concurrent queries issued on a single
       'Connection' will be performed serially.

       When the local libpq library is not thread-safe (ie. it has not been compiled with
       --enable-thread-safety), only a single database function will be performed at a time.

    -}