postgresql-connection-string: PostgreSQL connection string type, parser and builder

[ database, library, mit, postgresql ] [ Propose Tags ] [ Report a vulnerability ]

A library for parsing and constructing PostgreSQL connection strings (URIs and keyword/value format).

Supports the full PostgreSQL connection URI format as specified in the PostgreSQL documentation, including:

  • User and password authentication

  • Single and multiple host specifications with optional ports

  • Database name specification

  • Connection parameters as query string

  • Percent-encoding for special characters

The library provides both parsing (from Text to structured representation) and rendering (back to connection string format, either as URI or keyword/value pairs).


[Skip to Readme]

library postgresql-connection-string

library postgresql-connection-string:percent-encoding

library postgresql-connection-string:platform

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.1, 0.1.0.1, 0.1.0.2
Change log CHANGELOG.md
Dependencies base (>=4.13 && <5), bytestring (>=0.10 && <0.13), charset (>=0.3.12 && <0.4), containers (>=0.6 && <0.9), hashable (>=1.2 && <2), megaparsec (>=9.2.1 && <10.0), postgresql-connection-string, QuickCheck (>=2.14 && <2.16), text (>=1.2 && <3), text-builder (>=1 && <1.1) [details]
License MIT
Copyright (c) 2025, Nikita Volkov
Author Nikita Volkov <nikita.y.volkov@mail.ru>
Maintainer Nikita Volkov <nikita.y.volkov@mail.ru>
Category Database, PostgreSQL
Home page https://github.com/nikita-volkov/postgresql-connection-string
Bug tracker https://github.com/nikita-volkov/postgresql-connection-string/issues
Source repo head: git clone https://github.com/nikita-volkov/postgresql-connection-string
Uploaded by NikitaVolkov at 2025-10-10T13:35:47Z
Distributions
Downloads 2 total (2 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2025-10-10 [all 1 reports]

Readme for postgresql-connection-string-0.1.0.2

[back to package description]

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

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.