Functions for dealing with a PostgresSQL connection string
npm install pg-connection-stringpg-connection-string
====================

Functions for dealing with a PostgresSQL connection string
parse method taken from node-postgres
Copyright (c) 2010-2014 Brian Carlson (brian.m.carlson@gmail.com)
MIT License
``js
const parse = require('pg-connection-string').parse;
const config = parse('postgres://someuser:somepassword@somehost:381/somedatabase')
`
The resulting config contains a subset of the following properties:
* user - User with which to authenticate to the serverpassword
* - Corresponding passwordhost
* - Postgres server hostname or, for UNIX domain sockets, the socket filenameport
* - port on which to connectdatabase
* - Database name within the serverclient_encoding
* - string encoding the client will usessl
* , either a boolean or an object with propertiesrejectUnauthorized
* cert
* key
* ca
* application_name
* any other query parameters (for example, ) are preserved intact.
The pg-connection-string ConnectionOptions interface is not compatible with the ClientConfig interface that pg.Client expects. To remedy this, use the parseIntoClientConfig function instead of parse:
`ts
import { ClientConfig } from 'pg';
import { parseIntoClientConfig } from 'pg-connection-string';
const config: ClientConfig = parseIntoClientConfig('postgres://someuser:somepassword@somehost:381/somedatabase')
`
You can also use toClientConfig to convert an existing ConnectionOptions interface into a ClientConfig interface:
`ts
import { ClientConfig } from 'pg';
import { parse, toClientConfig } from 'pg-connection-string';
const config = parse('postgres://someuser:somepassword@somehost:381/somedatabase')
const clientConfig: ClientConfig = toClientConfig(config)
`
The short summary of acceptable URLs is:
* socket: - UNIX domain socketpostgres://
* - TCP connection
But see below for more details.
When user and password are not given, the socket path follows socket:, as in socket:/var/run/pgsql./var/run/pgsql
This form can be shortened to just a path: .
When user and password are given, they are included in the typical URL positions, with an empty host, as in socket://user:pass@/var/run/pgsql.
Query parameters follow a ? character, including the following special query parameters:
* db= - sets the database name (urlencoded)encoding=
* - sets the client_encoding property
TCP connections to the Postgres server are indicated with pg: or postgres: schemes (in fact, any scheme but socket: is accepted).
If username and password are included, they should be urlencoded.
The database name, however, should not be urlencoded.
Query parameters follow a ? character, including the following special query parameters:host=
* - sets host property, overriding the URL's hostencoding=
* - sets the client_encoding propertyssl=1
* , ssl=true, ssl=0, ssl=false - sets ssl to true or false, accordinglyuselibpqcompat=true
* - use libpq semanticssslmode=
* when uselibpqcompat=true is not setsslmode=disable
* - sets ssl to falsesslmode=no-verify
* - sets ssl to { rejectUnauthorized: false }sslmode=prefer
* , sslmode=require, sslmode=verify-ca, sslmode=verify-full - sets ssl to truesslmode=
* when uselibpqcompat=truesslmode=disable
* - sets ssl to falsesslmode=prefer
* - sets ssl to { rejectUnauthorized: false }sslmode=require
* - sets ssl to { rejectUnauthorized: false } unless sslrootcert is specified, in which case it behaves like verify-casslmode=verify-ca
* - sets ssl to { checkServerIdentity: no-op } (verify CA, but not server identity). This verifies the presented certificate against the effective CA specified in sslrootcert.sslmode=verify-full
* - sets ssl to {} (verify CA and server identity)sslcert=
* - reads data from the given file and includes the result as ssl.certsslkey=
* - reads data from the given file and includes the result as ssl.keysslrootcert=
* - reads data from the given file and includes the result as ssl.ca
A bare relative URL, such as salesdata`, will indicate a database name while leaving other properties empty.
> [!CAUTION]
> Choosing an sslmode other than verify-full has serious security implications. Please read https://www.postgresql.org/docs/current/libpq-ssl.html#LIBPQ-SSL-SSLMODE-STATEMENTS to understand the trade-offs.