| .. | ||
| esm | ||
| index.d.ts | ||
| index.js | ||
| LICENSE | ||
| package.json | ||
| README.md | ||
pg-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
Usage
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 propertiesrejectUnauthorizedcertkeyca
- any other query parameters (for example,
application_name) are preserved intact.
ClientConfig Compatibility for TypeScript
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';
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:
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)
Connection Strings
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.
UNIX Domain Sockets
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_encodingproperty
TCP Connections
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>- setshostproperty, overriding the URL's hostencoding=<encoding>- sets theclient_encodingpropertyssl=1,ssl=true,ssl=0,ssl=false- setssslto true or false, accordinglyuselibpqcompat=true- use libpq semanticssslmode=<sslmode>whenuselibpqcompat=trueis not setsslmode=disable- setssslto falsesslmode=no-verify- setssslto{ rejectUnauthorized: false }sslmode=prefer,sslmode=require,sslmode=verify-ca,sslmode=verify-full- setssslto true
sslmode=<sslmode>whenuselibpqcompat=truesslmode=disable- setssslto falsesslmode=prefer- setssslto{ rejectUnauthorized: false }sslmode=require- setssslto{ rejectUnauthorized: false }unlesssslrootcertis specified, in which case it behaves likeverify-casslmode=verify-ca- setssslto{ checkServerIdentity: no-op }(verify CA, but not server identity). This verifies the presented certificate against the effective CA specified in sslrootcert.sslmode=verify-full- setssslto{}(verify CA and server identity)
sslcert=<filename>- reads data from the given file and includes the result asssl.certsslkey=<filename>- reads data from the given file and includes the result asssl.keysslrootcert=<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.
