diff --git a/postgresql-libpq.cabal b/postgresql-libpq.cabal
--- a/postgresql-libpq.cabal
+++ b/postgresql-libpq.cabal
@@ -1,5 +1,5 @@
 Name:                postgresql-libpq
-Version:             0.9.3.1
+Version:             0.9.4.0
 Synopsis:            low-level binding to libpq
 
 Description:         This is a binding to libpq: the C application
@@ -9,7 +9,7 @@
                      backend server and to receive the results of
                      these queries.
 
-Homepage:            http://github.com/lpsmith/postgresql-libpq
+Homepage:            https://github.com/lpsmith/postgresql-libpq
 License:             BSD3
 License-file:        LICENSE
 Author:              Grant Monroe, Leon P Smith, Joey Adams
@@ -36,6 +36,13 @@
   Build-depends:       base >= 4 && < 5
                      , bytestring
 
+  if !os(windows)
+    Build-depends:     unix
+
+  if os(windows)
+    Build-depends:     Win32
+
+
   GHC-Options:       -Wall
   if flag(use-pkg-config)
     Pkgconfig-depends:   libpq
@@ -49,9 +56,9 @@
 
 source-repository head
   type:     git
-  location: http://github.com/lpsmith/postgresql-libpq
+  location: https://github.com/lpsmith/postgresql-libpq
 
 source-repository this
   type:     git
-  location: http://github.com/lpsmith/postgresql-libpq
-  tag:      v0.9.3.1
+  location: https://github.com/lpsmith/postgresql-libpq
+  tag:      v0.9.4.0
diff --git a/src/Database/PostgreSQL/LibPQ.hsc b/src/Database/PostgreSQL/LibPQ.hsc
--- a/src/Database/PostgreSQL/LibPQ.hsc
+++ b/src/Database/PostgreSQL/LibPQ.hsc
@@ -78,6 +78,7 @@
     , parameterStatus
     , protocolVersion
     , serverVersion
+    , libpqVersion
     , errorMessage
     , socket
     , backendPID
@@ -254,6 +255,14 @@
 mask_ = Control.Exception.block
 #endif
 
+import Control.Exception (try, IOException)
+
+#ifndef mingw32_HOST_OS
+import System.Posix.DynamicLinker
+#else
+import System.Win32.DLL
+#endif
+
 -- $dbconn
 -- The following functions deal with making a connection to a
 -- PostgreSQL backend server. An application program can have several
@@ -632,6 +641,28 @@
 serverVersion connection =
     fmap fromIntegral $ withConn connection c_PQserverVersion
 
+-- | Return the version of libpq that is being used.
+--
+-- The result of this function can be used to determine, at
+-- run time, if specific functionality is available in the currently
+-- loaded version of libpq. The function can be used, for example,
+-- to determine which connection options are available for
+-- PQconnectdb or if the hex bytea output added in PostgreSQL 9.0 is supported.
+--
+-- This function appeared in PostgreSQL version 9.1, so
+-- it cannot be used to detect required functionality in earlier
+-- versions, since linking to it will create a link dependency on version 9.1.
+libpqVersion :: IO Int
+libpqVersion = do
+#ifndef mingw32_HOST_OS
+  res <- try (dlsym Default "PQlibVersion") :: IO (Either IOException (FunPtr Int))
+#else
+  dl <- getModuleHandle $ Just "libpq"
+  res <- try (castPtrToFunPtr `fmap` getProcAddress dl "PQlibVersion") :: IO (Either IOException (FunPtr Int))
+#endif
+  case res of
+    Left _       -> error "libpqVersion is not supported for libpq < 9.1"
+    Right funPtr -> return $ mkLibpqVersion funPtr
 
 -- | Returns the error message most recently generated by an operation
 -- on the connection.
@@ -1916,7 +1947,9 @@
     , notifyExtra   :: {-# UNPACK #-} !B.ByteString -- ^ notification payload string
     } deriving Show
 
+#if __GLASGOW_HASKELL__ < 800
 #let alignment t = "%lu", (unsigned long)offsetof(struct {char x__; t (y__); }, y__)
+#endif
 instance Storable Notify where
   sizeOf _ = #{size PGnotify}
 
@@ -2391,6 +2424,9 @@
 
 foreign import ccall unsafe "libpq-fe.h PQserverVersion"
     c_PQserverVersion :: Ptr PGconn -> IO CInt
+
+foreign import ccall "dynamic"
+    mkLibpqVersion :: FunPtr Int -> Int
 
 foreign import ccall unsafe "libpq-fe.h PQsocket"
     c_PQsocket :: Ptr PGconn -> IO CInt
