postgresql-simple-0.7.0.1: Mid-Level PostgreSQL client library

Copyright | (c) 2011-2015 Leon P Smith (c) 2012 Joey Adams
License | BSD3
Maintainer | leon@melding-monads.com
Stability | experimental
Safe Haskell | None
Language | Haskell2010

Database.PostgreSQL.Simple.Notification

Description

Support for receiving asynchronous notifications via PostgreSQL's Listen/Notify mechanism. See https://www.postgresql.org/docs/9.5/static/sql-notify.html for more information.

Note that on Windows, `getNotification` currently uses a polling loop of 1 second to check for more notifications, due to some inadequacies in GHC's IO implementation and interface on that platform. See GHC issue #7353 for more information. While this workaround is less than ideal, notifications are still better than polling the database directly. Notifications do not create any extra work for the backend, and are likely cheaper on the client side as well.

https://hackage.haskell.org/trac/ghc/ticket/7353

Synopsis

- data Notification = Notification {
  - notificationPid :: !CPid
  - notificationChannel :: !ByteString
  - notificationData :: !ByteString
  }
- getNotification :: Connection -> IO Notification
- getNotificationNonBlocking :: Connection -> IO (Maybe Notification)
- getBackendPID :: Connection -> IO CPid

# Documentation

data Notification Source #

Constructors

Notification |

Fields

- notificationPid :: !CPid
- notificationChannel :: !ByteString
- notificationData :: !ByteString

#### Instances

Instances details

Show Notification Source # |
Instance details Defined in Database.PostgreSQL.Simple.Notification Methods showsPrec :: Int -> Notification -> ShowS Source # show :: Notification -> String Source # showList :: [Notification] -> ShowS Source #
Eq Notification Source # |
Instance details Defined in Database.PostgreSQL.Simple.Notification Methods (==) :: Notification -> Notification -> Bool Source # (/=) :: Notification -> Notification -> Bool Source #

getNotification :: Connection -> IO Notification Source #

Returns a single notification. If no notifications are available, `getNotification` blocks until one arrives.

It is safe to call `getNotification` on a connection that is concurrently being used for other purposes, note however that PostgreSQL does not deliver notifications while a connection is inside a transaction.

getNotificationNonBlocking :: Connection -> IO (Maybe Notification) Source #

Non-blocking variant of `getNotification`. Returns a single notification, if available. If no notifications are available, returns `Nothing`.

getBackendPID :: Connection -> IO CPid Source #

Returns the process `CPid` of the backend server process handling this connection.

The backend PID is useful for debugging purposes and for comparison to NOTIFY messages (which include the PID of the notifying backend process). Note that the PID belongs to a process executing on the database server host, not the local host!