mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-03-01 17:47:30 +01:00
db: Add support for key-value pair DSNs in postgresql
These are simple space-separated key-value pair sets of options instead of the URI style DSNs, but they are also much more flexible allowing the user to specify client SSL certificates, server certificates, compression and encryption levels, and much more (see [1] for more information) [1]: https://www.postgresql.org/docs/9.1/libpq-connect.html Changelog-Added: db: Added support for key-value DSNs for postgresql, allowing for a wider variety of configurations and environments.
This commit is contained in:
parent
15adcc915f
commit
1d9e7cf079
1 changed files with 18 additions and 1 deletions
|
@ -17,7 +17,24 @@
|
||||||
|
|
||||||
static bool db_postgres_setup(struct db *db)
|
static bool db_postgres_setup(struct db *db)
|
||||||
{
|
{
|
||||||
db->conn = PQconnectdb(db->filename);
|
size_t prefix_len = strlen("postgres://");
|
||||||
|
|
||||||
|
/* We attempt to parse the connection string without the `postgres://`
|
||||||
|
prefix first, so we can correctly handle the key-value-pair style of
|
||||||
|
DSN that postgresql supports. If that fails we try with the full
|
||||||
|
string, which matches the `scheme://user:password@host:port/dbname`
|
||||||
|
style of DSNs. The call to `PQconninfoParse` here is just to verify
|
||||||
|
`PQconnectdb` would be able to parse it correctly, that's why the
|
||||||
|
result is discarded again immediately. */
|
||||||
|
PQconninfoOption *info =
|
||||||
|
PQconninfoParse(db->filename + prefix_len, NULL);
|
||||||
|
|
||||||
|
if (info != NULL) {
|
||||||
|
PQconninfoFree(info);
|
||||||
|
db->conn = PQconnectdb(db->filename + prefix_len);
|
||||||
|
} else {
|
||||||
|
db->conn = PQconnectdb(db->filename);
|
||||||
|
}
|
||||||
|
|
||||||
if (PQstatus(db->conn) != CONNECTION_OK) {
|
if (PQstatus(db->conn) != CONNECTION_OK) {
|
||||||
db->error = tal_fmt(db, "Could not connect to %s: %s", db->filename, PQerrorMessage(db->conn));
|
db->error = tal_fmt(db, "Could not connect to %s: %s", db->filename, PQerrorMessage(db->conn));
|
||||||
|
|
Loading…
Add table
Reference in a new issue