PolyGres
← Back to the PolyWire overview
MySQL → PostgreSQL. No driver change.
Your MySQL application thinks it's talking to MySQL. It's actually talking to Postgres —
and it never finds out. The mysql CLI and JDBC connect over the real MySQL
wire protocol; PolyWire executes every statement against a real PostgreSQL database on
the other end.
How it works#
See it happen#
$ mysql -h 127.0.0.1 -P 13306 -u root -p mysql> SELECT * FROM orders; +----------+-------------+--------+ | order_id | customer_id | amount | +----------+-------------+--------+ | 1001 | 42 | 129.99 | | 1002 | 57 | 89.50 | +----------+-------------+--------+ 2 rows in set mysql>
MySQL client. MySQL wire protocol. PostgreSQL database. No client rewrite. Table contents above are illustrative — the query, protocol, and path are exactly real. See PolyWire capabilities for exact client-by-client coverage.
Try it in 60 seconds#
1. Start PolyWire — point it at a Postgres you already have:
docker run -p 13306:13306 \
-e POLYWIRE_HOST=<host> -e POLYWIRE_PASSWORD=<password> \
ghcr.io/polygres26/polywire:latest2. Connect — same mysql CLI you already use:
mysql -h 127.0.0.1 -P 13306 -u root -p3. Done — mysql CLI → MyWire → PolyWire → PostgreSQL. No driver change.
Pointing at a specific managed Postgres instead — Amazon RDS, Google Cloud SQL, Azure Database for PostgreSQL, or Oracle OCI? See CONNECTING.md for the real provider-specific setup.
Why teams do this#
Modernize without a rewrite
Move off MySQL without touching every application that talks to it — the driver, the connection string, and the SQL your app already sends all keep working.
Standardize on Postgres
Consolidate MySQL, Oracle, SQL Server, MongoDB, and more onto one real Postgres database, without every team rewriting its data layer first.
Keep governance in one place
The same SQL firewall, QoS, and audit path that governs every other protocol also governs this one — not a separate, unguarded route to your data.
Planning the actual migration — schema, sizing? PolyAdvisor scores the difficulty and sizes the target Postgres while PolyWire (above) keeps your application running the whole time.
Compatibility, honestly scoped#
| Protocol | Client tested against | Bound parameters decoded | Native error translation | RLS identity |
|---|---|---|---|---|
| MySQL | MySQL CLI, JDBC | ✓ | ✓ (errno) | — |
Ready to put PolyWire in front of Postgres?
Try it free — Developer Edition, all features. Taking it to production? Bring your architecture and we'll help map the deployment.