A tiny (240B) utility to enable
pg
read replicas
Allows you to easily pass your pg
-driven queries though a master-replica architecture.
By doing this, you can divert all select
queries to your read replica(s). This frees up your master node (aka, the writer
) to handle all transactions, insert
s, update
s, and delete
s. These changes will propagate (aka, replicate) to your replica(s) at the rate and discretion of your cluster.
When more than one replica is provided, the client will be chosen using a weighted round robin via the wrr
package.
Each replica can be assigned a different weight
(signifying capacity), but is given an equal weight distribution by default.
Important: The actual read-replication process is NOT handled by this library.
You must configure this within the database cluster directly.
This module is available in two formats:
- ES Module:
dist/replica.mjs
- CommonJS:
dist/replica.js
Install
$ npm install --save pg-replica
Usage
;; const writer = ...;const reader1 = ...;const reader2 = ...; const DB = ;; //=> true await DB;//=> uses writer await DB;//=> uses reader1 OR reader2 DB;//=> uses reader1 OR reader2
Clients
The pg-replica
accepts any Pool
or Client
instance from the pg
module.
Important: You must instantiate your
writer
and anyreaders
before passing them topg-replica
.
When defining readers
, you may pass a single instance or an array of instances. These, too, can be pg.Client
or pg.Pool
instances.
Additionally, read replicas (if more than one) will be chosen using a weighted round robin via the wrr
package.
When unspecified, read replicas are given equal weight distributions.
;; ;; declare ;
API
replica(writer, readers?)
Returns: typeof writer
Always returns the writer
instance.
This is the original pg.Pool
or pg.Client
you provided – except the query
method is now wrapped.
Because the original client is returned, all flavors of client.query
are supported. See pg
documentation for more info.
writer
Type: Client
Required: true
A pg.Client
or pg.Pool
instance.
This writer
will be used for all transactions and any non-select
queries.
readers
Type: Client | Client[] | Weighted<Client> | Weighted<Client>[]
Required: false
The read replica(s) to use for any select
queries.
When more than one replica is given, they are chosen via a weighted round robin – see Clients.
When zero replicas are provided, the writer
is used for all queries.
License
MIT © Luke Edwards