summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--python-pgsync.spec430
-rw-r--r--sources1
3 files changed, 432 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..d4382a6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/pgsync-2.5.0.tar.gz
diff --git a/python-pgsync.spec b/python-pgsync.spec
new file mode 100644
index 0000000..ad5de5d
--- /dev/null
+++ b/python-pgsync.spec
@@ -0,0 +1,430 @@
+%global _empty_manifest_terminate_build 0
+Name: python-pgsync
+Version: 2.5.0
+Release: 1
+Summary: Postgres to Elasticsearch/OpenSearch sync
+License: LGPLv3
+URL: https://github.com/toluaina/pgsync
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/6d/e2/b89c70db649a723f8542d6304ba43e96d1009f1b4786bf2576ac2d95147c/pgsync-2.5.0.tar.gz
+BuildArch: noarch
+
+Requires: python3-async-timeout
+Requires: python3-black
+Requires: python3-boto3
+Requires: python3-botocore
+Requires: python3-bump2version
+Requires: python3-bumpversion
+Requires: python3-certifi
+Requires: python3-charset-normalizer
+Requires: python3-click
+Requires: python3-distlib
+Requires: python3-elasticsearch
+Requires: python3-elasticsearch-dsl
+Requires: python3-environs
+Requires: python3-faker
+Requires: python3-filelock
+Requires: python3-greenlet
+Requires: python3-idna
+Requires: python3-importlib-metadata
+Requires: python3-isort
+Requires: python3-jmespath
+Requires: python3-marshmallow
+Requires: python3-mypy-extensions
+Requires: python3-newrelic
+Requires: python3-opensearch-dsl
+Requires: python3-opensearch-py
+Requires: python3-packaging
+Requires: python3-pathspec
+Requires: python3-platformdirs
+Requires: python3-psycopg2-binary
+Requires: python3-dateutil
+Requires: python3-dotenv
+Requires: python3-redis
+Requires: python3-requests
+Requires: python3-requests-aws4auth
+Requires: python3-s3transfer
+Requires: python3-six
+Requires: python3-sqlalchemy
+Requires: python3-sqlparse
+Requires: python3-tomli
+Requires: python3-typing-extensions
+Requires: python3-urllib3
+Requires: python3-virtualenv
+Requires: python3-zipp
+
+%description
+# PostgreSQL to Elasticsearch/OpenSearch 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)/[OpenSearch](https://opensearch.org/) or [OpenSearch](https://opensearch.org/).
+- 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)/[OpenSearch](https://opensearch.org/).
+
+
+### Requirements
+
+- [Python](https://www.python.org) 3.7+
+- [Postgres](https://www.postgresql.org) 9.6+
+- [Redis](https://redis.io) 3.1.0
+- [Elasticsearch](https://www.elastic.co/products/elastic-stack) 6.3.1+ or [OpenSearch](https://opensearch.org/) 1.3.7+
+- [SQlAlchemy](https://www.sqlalchemy.org) 1.3.4+
+
+### Postgres setup
+
+ Enable [logical decoding](https://www.postgresql.org/docs/current/logicaldecoding.html) in your
+ Postgres setting.
+
+ - You 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/main/examples/airbnb/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
+
+
+%package -n python3-pgsync
+Summary: Postgres to Elasticsearch/OpenSearch sync
+Provides: python-pgsync
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-pgsync
+# PostgreSQL to Elasticsearch/OpenSearch 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)/[OpenSearch](https://opensearch.org/) or [OpenSearch](https://opensearch.org/).
+- 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)/[OpenSearch](https://opensearch.org/).
+
+
+### Requirements
+
+- [Python](https://www.python.org) 3.7+
+- [Postgres](https://www.postgresql.org) 9.6+
+- [Redis](https://redis.io) 3.1.0
+- [Elasticsearch](https://www.elastic.co/products/elastic-stack) 6.3.1+ or [OpenSearch](https://opensearch.org/) 1.3.7+
+- [SQlAlchemy](https://www.sqlalchemy.org) 1.3.4+
+
+### Postgres setup
+
+ Enable [logical decoding](https://www.postgresql.org/docs/current/logicaldecoding.html) in your
+ Postgres setting.
+
+ - You 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/main/examples/airbnb/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
+
+
+%package help
+Summary: Development documents and examples for pgsync
+Provides: python3-pgsync-doc
+%description help
+# PostgreSQL to Elasticsearch/OpenSearch 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)/[OpenSearch](https://opensearch.org/) or [OpenSearch](https://opensearch.org/).
+- 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)/[OpenSearch](https://opensearch.org/).
+
+
+### Requirements
+
+- [Python](https://www.python.org) 3.7+
+- [Postgres](https://www.postgresql.org) 9.6+
+- [Redis](https://redis.io) 3.1.0
+- [Elasticsearch](https://www.elastic.co/products/elastic-stack) 6.3.1+ or [OpenSearch](https://opensearch.org/) 1.3.7+
+- [SQlAlchemy](https://www.sqlalchemy.org) 1.3.4+
+
+### Postgres setup
+
+ Enable [logical decoding](https://www.postgresql.org/docs/current/logicaldecoding.html) in your
+ Postgres setting.
+
+ - You 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/main/examples/airbnb/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
+
+
+%prep
+%autosetup -n pgsync-2.5.0
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-pgsync -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Fri May 05 2023 Python_Bot <Python_Bot@openeuler.org> - 2.5.0-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..c9168ef
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+8e022b9d99743bb5c25d5813529c34f5 pgsync-2.5.0.tar.gz