postgresql-connection-string
PostgreSQL connection string type, parser and builder
https://github.com/nikita-volkov/postgresql-connection-string
| Stackage Nightly 2026-01-10: | 0.1.0.5 |
| Latest on Hackage: | 0.1.0.5 |
postgresql-connection-string-0.1.0.5@sha256:75a679ef877121482615849517b1545535467456852c8690fdbfd715e512563b,3420Module documentation for 0.1.0.5
postgresql-connection-string
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://andpostgres://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://andpostgres://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
ConnectionStringdata type
API
Constructors
hostAndPort- Specify a host and optional portuser- Set the usernamepassword- Set the passworddbname- Set the database nameparam- Add a connection parameter
Accessors
toHosts- Get list of hosts and portstoUser- Get usernametoPassword- Get passwordtoDbname- Get database nametoParams- Get parameter map
Rendering
toUrl- Convert to URI formattoKeyValueString- Convert to keyword/value format
Parsing
parseText- Parse from Text with error reportingparserOf- Get the underlying Megaparsec parser
Transformations
interceptParam- Extract and remove a parameter