PostgreSQL to Elasticsearch/OpenSearch sync
- PGSync is a middleware for syncing data from Postgres to Elasticsearch/OpenSearch or OpenSearch.
- It allows you to keep Postgres as your source of truth data source and expose structured denormalized documents in Elasticsearch/OpenSearch.
Requirements
- Python 3.7+
- Postgres 9.6+
- Redis 3.1.0
- Elasticsearch 6.3.1+ or OpenSearch 1.3.7+
- SQlAlchemy 1.3.4+
Postgres setup
Enable logical decoding in your Postgres setting.
-
You also need to set up two parameters in your Postgres config postgresql.conf
wal_level = logicalmax_replication_slots = 1
Installation
You can install PGSync from PyPI:
$ pip install pgsync
Config
Create a schema for the application named e.g schema.json
Example spec
.. code-block::
[
{
"database": "[database name]",
"index": "[Elasticsearch or OpenSearch index]",
"nodes": {
"table": "[table A]",
"schema": "[table A schema]",
"columns": [
"column 1 from table A",
"column 2 from table A",
... additional columns
],
"children": [
{
"table": "[table B with relationship to table A]",
"schema": "[table B schema]",
"columns": [
"column 1 from table B",
"column 2 from table B",
... additional columns
],
"relationship": {
"variant": "object",
"type": "one_to_many"
},
...
},
{
... additional children
}
]
}
}
]
Environment variables
Setup environment variables required for the application
SCHEMA='/path/to/schema.json'
ELASTICSEARCH_HOST=localhost
ELASTICSEARCH_PORT=9200
PG_HOST=localhost
PG_USER=i-am-root # this must be a postgres superuser or replication user
PG_PORT=5432
PG_PASSWORD=*****
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_DB=0
REDIS_AUTH=*****
Running
Bootstrap the database (one time only)
- $ bootstrap --config schema.json
Run pgsync as a daemon
- $ pgsync --config schema.json --daemon
Metadata
Release files for pgsync-kaboom 2.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pgsync-kaboom-2.5.0.tar.gz | 110.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pgsync_kaboom-2.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 167.9 kB
Release files / pgsync-kaboom-2.5.0.tar.gz
| Download URL | pgsync-kaboom-2.5.0.tar.gz |
|---|---|
| Size | 110.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cb1326ba1b9b7dbce69920a426dd6c70489f737edc4708f92bf45ad9f3343fb7
|
|
BLAKE2b-256 checksum How to use checksums |
fd7f8b3c27793381567802db72c4da0c99c93884905da9a4ade5a50d3734a3f3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.1 CPython/3.9.6
|
Release files / pgsync_kaboom-2.5.0-py3-none-any.whl
| Download URL | pgsync_kaboom-2.5.0-py3-none-any.whl |
|---|---|
| Size | 57.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6760fa7b6abf3006e02ecf689e18e98d3f06767dca1c60e28ea732c60a701ade
|
|
BLAKE2b-256 checksum How to use checksums |
fb60d0229c30c79f27555eca78bdd5300c29ce4891740a1efb034bd6bd4a3cfd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.1 CPython/3.9.6
|