Module

Control.Monad.Postgres.Base

Package
purescript-postgresql
Repository
cakekindel/purescript-postgresql

#PostgresT Source

newtype PostgresT :: forall k. (k -> Type) -> k -> Typenewtype PostgresT m a

Monad handling pool resource acquisition & release

runPostgres
  {connectionString: "postgresql://postgres:postgres@localhost:5432"}
  $ session do
      exec_ "create table foo (bar int);"
      exec_ "insert into foo values (1);"
      res <- query "select * from foo"
      pure $ res == 1

Is equivalent to:

do
  pool <- liftEffect $ Pool.make {connectionString: "postgresql://postgres:postgres@localhost:5432"}
  finally (Pool.end pool) do
    client <- Pool.connect pool
    finally (liftEffect $ Pool.release pool client) do
      Client.exec_ "create table foo (bar int);" client
      Client.exec_ "insert into foo values (1);" client
      res <- Client.query "select * from foo" client
      pure $ res == 1

Constructors

Instances

#session Source

session :: forall e f m a. MonadBracket e f m => MonadAff m => MonadSession (SessionT m) => SessionT m a -> PostgresT m a

Lifts a session to PostgresT, releasing the client to the pool after execution.

#transaction Source

transaction :: forall m a. MonadBracket Error Fiber m => MonadAff m => MonadSession (SessionT m) => SessionT m a -> PostgresT m a

Lifts a session to PostgresT, running the session in a transaction.

If the session throws an error, the transaction will be rolled back and the error rethrown.

#withPool Source

withPool :: forall m a. PostgresT m a -> Pool -> m a

Execute a PostgresT using an existing connection pool.

This will not invoke Pool.end after executing.

#runPostgres Source

runPostgres :: forall m a missing trash r e f. MonadBracket e f m => MonadAff m => Union r missing (Config trash) => Record r -> PostgresT m a -> m a

Create a new connection pool from the provided config and execute the postgres monad, invoking Effect.Aff.Postgres.Pool.end afterwards.