lncfg: add postgres

This commit is contained in:
Joost Jager committed 2021-09-21 10:44:20 +02:00
1 parent 3eb80cac97
commit ae6cf72b46
4 files changed
+151 -1

No files matched your search

+31
View File
@@ -0,0 +1,31 @@
# Postgres support in LND
With the introduction of the `kvdb` interface, LND can support multiple database
backends. One of the supported backends is Postgres. This document
describes how it can be configured.
## Building LND with postgres support
To build LND with postgres support, include the following build tag:
```shell
⛰ make tags="kvdb_postgres"
```
## Configuring Postgres for LND
In order for LND to run on Postgres, an empty database should already exist. A
database can be created via the usual ways (psql, pgadmin, etc). A user with
access to this database is also required.
Creation of a schema and the tables is handled by LND automatically.
## Configuring LND for Postgres
LND is configured for Postgres through the following configuration options:
* `db.backend=postgres` to select the Postgres backend.
* `db.postgres.dsn=...` to set the database connection string that includes
database, user and password.
* `db.postgres.timeout=...` to set the connection timeout. If not set, no
timeout applies.
@@ -38,6 +38,27 @@ instantaneous. Read the [guide on leader
election](https://github.com/lightningnetwork/lnd/blob/master/docs/leader_election.md)
for more information.
### Postgres database support
This release adds [support for Postgres as a database
backend](https://github.com/lightningnetwork/lnd/pull/5366) to lnd. Postgres
has several advantages over the default bbolt backend:
* Better handling of large data sets.
* On-the-fly database compaction (auto vacuum).
* Database replication.
* Inspect data while lnd is running (bbolt opens the database exclusively).
* Usage of industry-standard tools to manage the stored data, get performance
metrics, etc.
Furthermore, the SQL platform opens up possibilities to improve lnd's
performance in the future. Bbolt's single-writer model is a severe performance
bottleneck, whereas Postgres offers a variety of locking models. Additionally,
structured tables reduce the need for custom serialization/deserialization code
in `lnd`, saving developer time and limiting the potential for bugs.
Instructions for enabling Postgres can be found in
[docs/postgres.md](../postgres.md).
## Protocol Extensions
### Explicit Channel Negotiation