Skip to main content

PostgreSQL to Elasticsearch sync

PGSync <https://pgsync.com>_ is a middleware for syncing data from Postgres <https://www.postgresql.org>_ to Elasticsearch <https://www.elastic.co/products/elastic-stack>.
It allows you to keep Postgres <https://www.postgresql.org>
as your source of truth data source and expose structured denormalized documents in Elasticsearch <https://www.elastic.co/products/elastic-stack>_.

Requirements

  • Python <https://www.python.org>_ 3.6+
  • Postgres <https://www.postgresql.org>_ 9.4+
  • Redis <https://redis.io>_
  • Elasticsearch <https://www.elastic.co/products/elastic-stack>_ 6.3.1+

Postgres setup

Enable logical decoding <https://www.postgresql.org/docs/current/logicaldecoding.html>_ in your Postgres setting.

  • you would also need to set up two parameters in your Postgres config postgresql.conf

    wal_level = logical

    max_replication_slots = 1

Installation

You can install PGSync from PyPI <https://pypi.org>_:

$ pip install pgsync

Config

Create a schema for the application named e.g schema.json

Example schema <https://github.com/toluaina/pgsync/blob/master/examples/airbnb/schema.json>_

Example spec

.. code-block::

[
    {
        "database": "[database name]",
        "index": "[elasticsearch 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"
                        },
                        ...
                    },
                    {
                        ... any other additional children
                    }
                ]
            }
        ]
    }
]

Environment variables

Setup required environment variables 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
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

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pgsync-1.1.22.tar.gz (69.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pgsync-1.1.22-py2.py3-none-any.whl (37.0 kB view details)

Uploaded Python 2Python 3

File details

Details for the file pgsync-1.1.22.tar.gz.

File metadata

  • Download URL: pgsync-1.1.22.tar.gz
  • Upload date:
  • Size: 69.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.52.0 CPython/3.9.0

File hashes

Hashes for pgsync-1.1.22.tar.gz
Algorithm Hash digest
SHA256 89928a1215f3879c6a579691b8a372afbc0ff880a91cc9df0dc74968c03adb27
MD5 3cfbd9374910bf6610126f243a9f14c3
BLAKE2b-256 f30d0638e5d821a5caef45e756ca40b4a4df6f55e8953262bc30c549e8b87b44

See more details on using hashes here.

File details

Details for the file pgsync-1.1.22-py2.py3-none-any.whl.

File metadata

  • Download URL: pgsync-1.1.22-py2.py3-none-any.whl
  • Upload date:
  • Size: 37.0 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.52.0 CPython/3.9.0

File hashes

Hashes for pgsync-1.1.22-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 f103c832ed3779b7091f44486c1b627c27c286ac596aa581d75f37bea18438dc
MD5 58651bf44bd15d49fd9ea78030ce5c88
BLAKE2b-256 eb0745e68465b4540ae1edb89992c212fdeb91d015e58755fc6a3c6e3aee045e

See more details on using hashes here.

Release history Release notifications | RSS feed

7.3.0

2 files

7.2.0

2 files

7.1.0

2 files

7.0.5

2 files

7.0.2

2 files

7.0.1

2 files

7.0.0

2 files

6.2.0

2 files

6.1.1

2 files

6.1.0

2 files

6.0.0

2 files

5.0.0

2 files

4.2.1

2 files

4.2.0

2 files

4.1.0

2 files

4.0.0

2 files

3.3.0

2 files

3.2.1

2 files

3.2.0

2 files

3.1.0

2 files

3.0.0

2 files

2.5.0

2 files

2.4.0

2 files

2.3.3

2 files

2.3.2

2 files

2.3.1

2 files

2.3.0

2 files

2.2.1

2 files

2.2.0

2 files

2.1.11

2 files

2.1.10

2 files

2.1.9

2 files

2.1.8

2 files

2.1.7

2 files

2.1.6

2 files

2.1.5

2 files

2.1.4

2 files

2.1.3

2 files

2.1.2

2 files

2.1.1

2 files

2.0.0

2 files

1.1.33

2 files

1.1.32

2 files

1.1.31

2 files

1.1.30

2 files

1.1.29

2 files

1.1.28

2 files

1.1.27

2 files

1.1.26

2 files

1.1.25

2 files

1.1.24

2 files

1.1.23

2 files

This release

1.1.22 This release

2 files

1.1.21

2 files

1.1.20

2 files

1.1.19

2 files

1.1.17

2 files

1.1.16

2 files

1.1.14

10 files

1.1.13

10 files

1.1.12

10 files

1.1.11

10 files

1.1.10

10 files

1.1.9

10 files

1.1.8

10 files

1.1.7

10 files

1.1.6

7 files

1.1.5

10 files

1.1.4

10 files

1.1.3

10 files

1.1.2

7 files

1.1.1

10 files

1.1.0

3 files

1.0.1

10 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page