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
constparse=require('pg-connection-string').parse;constconfig=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
- any other query parameters (for example,
application_name
) 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
:
import{ClientConfig}from'pg';import{parseIntoClientConfig}from'pg-connection-string';constconfig: ClientConfig=parseIntoClientConfig('postgres://someuser:somepassword@somehost:381/somedatabase')
You can also use toClientConfig
to convert an existing ConnectionOptions
interface into a ClientConfig
interface:
import{ClientConfig}from'pg';import{parse,toClientConfig}from'pg-connection-string';constconfig=parse('postgres://someuser:somepassword@somehost:381/somedatabase')constclientConfig: ClientConfig=toClientConfig(config)
The short summary of acceptable URLs is:
socket:<path>?<query>
- UNIX domain socketpostgres://<user>:<password>@<host>:<port>/<database>?<query>
- 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
. This form can be shortened to just a path: /var/run/pgsql
.
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=<database>
- sets the database name (urlencoded)encoding=<encoding>
- sets theclient_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=<host>
- setshost
property, overriding the URL's hostencoding=<encoding>
- sets theclient_encoding
propertyssl=1
,ssl=true
,ssl=0
,ssl=false
- setsssl
to true or false, accordinglyuselibpqcompat=true
- use libpq semanticssslmode=<sslmode>
whensslcompat
is not setsslmode=disable
- setsssl
to falsesslmode=no-verify
- setsssl
to{ rejectUnauthorized: false }
sslmode=prefer
,sslmode=require
,sslmode=verify-ca
,sslmode=verify-full
- setsssl
to true
sslmode=<sslmode>
whensslcompat=libpq
sslmode=disable
- setsssl
to falsesslmode=prefer
- setsssl
to{ rejectUnauthorized: false }
sslmode=require
- setsssl
to{ rejectUnauthorized: false }
unlesssslrootcert
is specified, in which case it behaves likeverify-ca
sslmode=verify-ca
- setsssl
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
- setsssl
to{}
(verify CA and server identity)
sslcert=<filename>
- reads data from the given file and includes the result asssl.cert
sslkey=<filename>
- reads data from the given file and includes the result asssl.key
sslrootcert=<filename>
- reads data from the given file and includes the result asssl.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.