packages feed

postgresql-replicant-0.2.0.0: app/Main.hs

module Main where

import Data.Aeson
import Data.Maybe
import Control.Exception
import System.Environment

import Database.PostgreSQL.Replicant

main :: IO ()
main = do
  dbUser <- fromMaybe "postgresql" <$> lookupEnv "PG_USER"
  dbName <- fromMaybe "postgresql" <$> lookupEnv "PG_DATABASE"
  dbHost <- fromMaybe "localhost" <$> lookupEnv "PG_HOST"
  dbPort <- fromMaybe "5432" <$> lookupEnv "PG_PORT"
  dbSlot <- fromMaybe "replicant_test" <$> lookupEnv "PG_SLOTNAME"
  dbUpdateDelay <- fromMaybe "3000" <$> lookupEnv "PG_UPDATEDELAY"
  let settings = PgSettings dbUser Nothing dbName dbHost dbPort dbSlot dbUpdateDelay
  withLogicalStream settings $ \change -> do
    putStrLn "Change received!"
    print $ encode change
    pure $ changeNextLSN change
  `catch`
  \exc -> do
    putStrLn "Something bad happened: "
    print @SomeException exc