MIT licensed and maintained by Nikita Volkov
This version can be pinned in stack with:postgresql-connection-string-0.1.0.5@sha256:75a679ef877121482615849517b1545535467456852c8690fdbfd715e512563b,3420

Module documentation for 0.1.0.5

postgresql-connection-string

Hackage Continuous Haddock

A Haskell library for parsing and constructing PostgreSQL connection strings.

Overview

This library provides a type-safe way to work with PostgreSQL connection strings, supporting both the URI format and the keyword/value format as specified in the PostgreSQL documentation.

Features

  • URI Format Parsing: Parse postgresql:// and postgres:// URIs
  • Keyword/Value Format: Convert to PostgreSQL’s keyword/value connection string format
  • Type-Safe Construction: Build connection strings using composable constructors
  • Percent-Encoding: Automatic handling of special characters in connection string components
  • Multiple Hosts: Support for multiple host specifications (for failover/load balancing)
  • Query Parameters: Full support for connection parameters as query strings

Usage

Parsing Connection Strings

import PostgresqlConnectionString

-- Parse a URI format connection string
case parseText "postgresql://user:password@localhost:5432/mydb?application_name=myapp" of
  Left err -> putStrLn $ "Parse error: " <> err
  Right connStr -> do
    print $ toUser connStr        -- Just "user"
    print $ toDbname connStr      -- Just "mydb"
    print $ toHosts connStr       -- [("localhost", Just 5432)]

Constructing Connection Strings

import PostgresqlConnectionString

-- Build a connection string using combinators
let connStr = mconcat
      [ user "myuser"
      , password "secret"
      , hostAndPort "localhost" (Just 5432)
      , dbname "mydb"
      , param "application_name" "myapp"
      , param "connect_timeout" "10"
      ]

-- Convert to URI format
print $ toUrl connStr
-- "postgresql://myuser:secret@localhost:5432/mydb?application_name=myapp&connect_timeout=10"

-- Convert to keyword/value format
print $ toKeyValueString connStr
-- "host=localhost port=5432 user=myuser password=secret dbname=mydb application_name=myapp connect_timeout=10"

Multiple Hosts

-- Support for multiple hosts (failover/load balancing)
let connStr = mconcat
      [ hostAndPort "host1" (Just 5432)
      , hostAndPort "host2" (Just 5433)
      , dbname "mydb"
      ]

print $ toUrl connStr
-- "postgresql://host1:5432,host2:5433/mydb"

Accessing Components

-- Extract individual components
toHosts :: ConnectionString -> [(Text, Maybe Word16)]
toUser :: ConnectionString -> Maybe Text
toPassword :: ConnectionString -> Maybe Text
toDbname :: ConnectionString -> Maybe Text
toParams :: ConnectionString -> Map Text Text

Related Projects

This library was extracted from the hasql project to provide a standalone connection string parser and builder that can be used independently of the full hasql ecosystem.

Changes

0.1.0.0

Initial release of postgresql-connection-string as a standalone library.

This library was extracted from the hasql project to provide a focused, reusable component for parsing and constructing PostgreSQL connection strings.

Features

  • Parse PostgreSQL connection URIs (postgresql:// and postgres:// schemes)
  • Parse keyword/value format connection strings
  • Construct connection strings programmatically using composable combinators
  • Convert between URI and keyword/value formats
  • Support for multiple host specifications (for failover/load balancing)
  • Automatic percent-encoding/decoding of special characters
  • Type-safe representation with ConnectionString data type

API

Constructors

  • hostAndPort - Specify a host and optional port
  • user - Set the username
  • password - Set the password
  • dbname - Set the database name
  • param - Add a connection parameter

Accessors

  • toHosts - Get list of hosts and ports
  • toUser - Get username
  • toPassword - Get password
  • toDbname - Get database name
  • toParams - Get parameter map

Rendering

  • toUrl - Convert to URI format
  • toKeyValueString - Convert to keyword/value format

Parsing

  • parseText - Parse from Text with error reporting
  • parserOf - Get the underlying Megaparsec parser

Transformations

  • interceptParam - Extract and remove a parameter