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 |
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.
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 #
Notification | |
|
Instances
Eq Notification Source # | |
Defined in Database.PostgreSQL.Simple.Notification (==) :: Notification -> Notification -> Bool Source # (/=) :: Notification -> Notification -> Bool Source # |
|
Show Notification Source # | |
Defined in Database.PostgreSQL.Simple.Notification |
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!