@hackage eventium-postgresql0.5.2
Postgres implementations for eventium
Installation
Dependencies (8)
- aeson >=1.5 && <2.3
- base >=4.9 && <5
- bytestring >=0.10 && <0.13
- eventium-core >=0.5.0 && <0.6.0
- eventium-sql-common >=0.5.0 && <0.6.0
- mtl >=2.2 && <2.4 Show all…
Dependents (0)
Package Flags
ci
(off by default)
Enable -Werror for CI builds
Eventium PostgreSQL
PostgreSQL event store backend for Eventium.
Overview
eventium-postgresql provides a production-grade event store backed by PostgreSQL.
It uses the persistent library for type-safe database access and guarantees
monotonically increasing global sequence numbers via LOCK IN EXCLUSIVE MODE.
API
postgresqlEventStoreWriter
:: (MonadIO m)
=> SqlEventStoreConfig entity serialized
-> VersionedEventStoreWriter (SqlPersistT m) serialized
Readers come from eventium-sql-common (re-exported):
sqlEventStoreReader :: SqlEventStoreConfig entity serialized -> VersionedEventStoreReader (SqlPersistT m) serialized
sqlGlobalEventStoreReader :: SqlEventStoreConfig entity serialized -> GlobalEventStoreReader (SqlPersistT m) serialized
Usage
import Eventium.Store.Postgresql
import Database.Persist.Postgresql
main :: IO ()
main = runStdoutLoggingT $
withPostgresqlPool connStr 10 $ \pool -> do
-- Use defaultSqlEventStoreConfig for the standard schema
let writer = postgresqlEventStoreWriter defaultSqlEventStoreConfig
reader = sqlEventStoreReader defaultSqlEventStoreConfig
flip runSqlPool pool $ do
runMigration migrateSqlEvent
-- writer and reader are ready to use
Setup
# Start PostgreSQL with docker-compose (from project root)
docker compose up -d
# Default connection settings (matching docker-compose.yaml):
# POSTGRES_HOST=127.0.0.1 POSTGRES_PORT=5432
# POSTGRES_USER=postgres POSTGRES_PASSWORD=password
# POSTGRES_DBNAME=eventium_test
Concurrency
PostgreSQL uses LOCK table_name IN EXCLUSIVE MODE during writes. This ensures
that auto-increment IDs are assigned in commit order, so concurrent readers
always see a gapless, monotonically increasing global sequence.
Installation
dependencies:
- eventium-core
- eventium-postgresql
- persistent-postgresql
Documentation
License
MIT -- see LICENSE.md