What pg2osync is
pg2osync keeps a search index in sync with a database, in real time, from one binary. It reads changes straight from the database's replication stream — PostgreSQL's WAL or MySQL's binlog — and writes them to OpenSearch, Elasticsearch or Meilisearch within milliseconds. No Logstash, no Kafka, no Redis, no JVM.
export PG2OSYNC_SOURCE_URL="postgres://user:pass@db-host/mydb"
pg2osync init --table users # writes pg2osync.toml, checks the table exists
pg2osync validate # checks both ends and the server's settings
pg2osync run # initial load, then streaming
Installing it, the comparison against Debezium and Logstash, and the current feature matrix are in the README. This site is the rest:
- Configuration — every option, with what each one costs.
- Sources — what PostgreSQL and MySQL/MariaDB each need switched on, and how much of the server's behaviour leaks into the pipeline.
- Sinks — OpenSearch, Elasticsearch and Meilisearch, including where they differ in what they can guarantee.
- Deployment — Docker, Kubernetes, systemd, probes.
- Operations — metrics, every failure mode, and the recovery for each.
- What it costs your database — connections, privileges, and the measured load on a busy source.
- Architecture and design decisions — how it works, and why it was built this way rather than another.
Every number in these pages was measured by a script in
dev/, and the page
says which one. Where a limit has not been measured, it says that instead.