Polygres

PolyGres

The intelligent gateway for Postgres.

Connect, secure, control, and accelerate every application and AI agent accessing Postgres — regardless of the protocol they speak.

Connect · Protect · Control · Accelerate · Observe

Oracle · MySQL · SQL Server · MongoDB · OpenSearch · DynamoDB · SQS · PostgreSQL · gRPC · MCP

Everything talks to Postgres.

One control point for every Postgres workload.

01 ghcr.io/polygres26/polywire

PolyWire

Put an intelligent control point in front of Postgres.

Connect

Any client. One Postgres — with live semantic execution translation, not just protocol framing. Oracle, MySQL, SQL Server, MongoDB, OpenSearch, DynamoDB, SQS, PostgreSQL, gRPC, and MCP — every one keeps its own driver and protocol.

Protect

A SQL firewall, connection ACL, authentication, and Postgres row-level security identity all apply before a request reaches Postgres — the same policies regardless of which protocol the caller speaks.

Control

QoS admission control, routing, connection pooling, sharding, and planned/unplanned failover — protect backend capacity and keep Postgres available under load.

Accelerate

PolyCache serves repeat reads without a Postgres round trip; rollups keep pre-aggregated tables fresh automatically.

Observe

See every request before it reaches Postgres — client → protocol → SQL → policy → route → backend → latency → error — exported to the tools you already run.

Different protocols. Same policies. Same Postgres. One control point for every Postgres workload.

What is PolyWire?

Applications & AI agents Oracle · MySQL · SQL Server · MongoDB · OpenSearch · AWS APIs · MCP
POLYWIRE Connect · Protect · Control · Accelerate · Observe
Postgres, anywhere RDS · Aurora · Cloud SQL · Azure · OCI · Supabase · On-prem

See how PolyWire works, stage by stage → — the detailed eight-stage pipeline behind this diagram.

Four ways teams put PolyWire to work

Modernize databases

Move Oracle, MySQL, SQL Server, or MongoDB applications onto Postgres without an immediate client rewrite — every protocol keeps working exactly as it always has.

Build a Postgres control point

Firewall, QoS, routing, pooling, and failover in one admin surface — instead of five databases' own tooling, run indefinitely, not just during a migration.

Scale Postgres horizontally

Route tenants, customers, or predicates across shards and merge results centrally — without the application knowing sharding exists.

Govern AI access

MCP and AI agents enter through the exact same firewall, QoS, and audit path as every other client — not a separate, unguarded route to your data.

Explore all PolyWire capabilities →

See it happen

Pick a protocol — same demo, different client, same PostgreSQL on the other end.

$ sql app/password@//localhost:11521/postgres

SQLcl: Release 23.4 Production

SQL> SELECT * FROM orders;

ORDER_ID  CUSTOMER_ID  AMOUNT
--------  -----------  -------
    1001           42   129.99
    1002           57    89.50

2 rows selected.

SQL>
SQLcl (Oracle client)OraWirePolyWirePostgreSQL

Full Oracle → Postgres guide →

$ 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 CLIMyWirePolyWirePostgreSQL

Full MySQL → Postgres guide →

$ mongosh mongodb://localhost:27017

test> db.orders.find()

[
  { _id: 1001, customer_id: 42, amount: 129.99 },
  { _id: 1002, customer_id: 57, amount: 89.50 }
]

test>
mongoshMongoWirePolyWirePostgreSQL

Full MongoDB → Postgres guide →

$ curl -s localhost:9200/orders/_search

{
  "hits": {
    "total": { "value": 2 },
    "hits": [
      { "_source": { "order_id": 1001, "amount": 129.99 } },
      { "_source": { "order_id": 1002, "amount": 89.50 } }
    ]
  }
}
REST clientOSWirePolyWirePostgreSQL

Full OpenSearch → Postgres guide →

Real client. Real wire protocol. PostgreSQL database. No client rewrite. Table/document contents above are illustrative — the protocol and path are exactly real. (SQLcl, JDBC, and psql are what's most thoroughly verified today; see PolyWire capabilities for exact client-by-client coverage.)

Try PolyWire in 60 seconds

What do you use? Point it at a Postgres you already have:

1. Start PolyWire

docker run -p 15432:15432 \ -e POLYWIRE_HOST=<host> -e POLYWIRE_PASSWORD=<password> \ ghcr.io/polygres26/polywire:latest

2. Connect

psql -h localhost -p 15432 -U postgres

3. Done — your client → PolyWire → PostgreSQL. No rewrite.

1. Start PolyWire

docker run -p 11521:11521 \ -e POLYWIRE_HOST=<host> -e POLYWIRE_PASSWORD=<password> \ ghcr.io/polygres26/polywire:latest

2. Connect

sql app/password@//localhost:11521/postgres

3. Done — Oracle client → OraWire → PolyWire → PostgreSQL. No driver change.

1. Start PolyWire

docker run -p 13306:13306 \ -e POLYWIRE_HOST=<host> -e POLYWIRE_PASSWORD=<password> \ ghcr.io/polygres26/polywire:latest

2. Connect

mysql -h 127.0.0.1 -P 13306 -u root -p

3. Done — mysql CLI → MyWire → PolyWire → PostgreSQL. No driver change.

1. Start PolyWire

docker run -p 27017:27017 \ -e POLYWIRE_HOST=<host> -e POLYWIRE_PASSWORD=<password> \ ghcr.io/polygres26/polywire:latest

2. Connect

mongosh mongodb://localhost:27017

3. Done — mongosh → MongoWire → PolyWire → PostgreSQL. No driver change.

1. Start PolyWire

docker run -p 9200:9200 \ -e POLYWIRE_HOST=<host> -e POLYWIRE_PASSWORD=<password> \ ghcr.io/polygres26/polywire:latest

2. Connect

curl -s localhost:9200/_search

3. Done — REST client → OSWire → PolyWire → PostgreSQL. No driver change.

See every protocol at once (SQL Server, DynamoDB, SQS included) →
docker run \ -p 19090:19090 -p 15432:15432 -p 13306:13306 -p 11521:11521 \ -p 14333:14333 -p 27017:27017 -p 18000:18000 -p 9324:9324 \ -e POLYWIRE_HOST=<host> \ -e POLYWIRE_PASSWORD=<password> \ ghcr.io/polygres26/polywire:latest
psql -h localhost -p 15432 -U postgres # Postgres wire mysql -h 127.0.0.1 -P 13306 -u root -p # MySQL wire sqlcmd -S localhost,14333 -U sa -P '<password>' # SQL Server wire sql app/password@//localhost:11521/postgres # Oracle wire (SQLcl) mongosh mongodb://localhost:27017 # MongoDB wire curl -s localhost:9200/_search # OpenSearch wire aws dynamodb scan --table-name orders \ # DynamoDB wire --endpoint-url http://localhost:18000 aws sqs receive-message \ # SQS wire --queue-url http://localhost:9324/queue/orders \ --endpoint-url http://localhost:9324

That works as-is against an existing on-prem Postgres. For a specific managed provider instead — Supabase, Amazon RDS, Google Cloud SQL, Azure Database for PostgreSQL, or Oracle Cloud Infrastructure's Database with PostgreSQL — see CONNECTING.md.

Stop one workload from taking down Postgres.

QoS for Postgres, at the gateway. Prioritize, throttle, bound concurrency, and shed load — before Postgres saturates, not after it falls over. A real token-bucket admission controller, per workload class (query/write/ddl/txn). See Security for the full scope.

Different protocols. Same security policy.

Oracle application? Same policy. MySQL application? Same policy. MCP agent? Same policy. Security follows the request, not the protocol.

SQL Firewall · ACL · Authentication · RLS · TLS · Secrets · Audit

Full, honestly-scoped security detail →

Explore PolyWire in depth — detailed architecture, comparison →

Built for enterprise Postgres

PolyWire architecture: ten client protocols — OraWire, MySQL, SQL Server, Postgres wire, MongoDB, DynamoDB, Amazon SQS, gRPC, MCP, and OpenSearch — feed one shared eight-stage pipeline: Frontends, FirewallStage (ACL/IP allow-deny, PROXY protocol v2/XFF — security first, policy-driven access control), RouterStage (shard/backend selection — shard scatter-gather, HA failover to standby), QosControlStage (concurrency control, throttling, priority queues), DialectTranslationStage, RollupStage, CacheStage, and StatsCollectorStage, each stage paired with the customer outcome it drives (multi-protocol single entry point, security-first access control, shard-aware smart routing, protected resources/SLAs, protocol-agnostic consistency, reduced load via pre-aggregation, lower latency, real-time observability), backed by a Postgres control plane (polywire_config/polywire_firewall_rules with hot-reload and standby failover via LISTEN/NOTIFY), executing against a primary Postgres and any number of additional shards, with a key-outcomes panel calling out simple architecture, strong security (centralized policies, auth, and SQL firewall), max performance, elastic scaling, lower costs, and operational excellence
Every wire protocol feeds the same shared pipeline — firewall (ACL/PROXY protocol), router (shard scatter-gather and standby failover), QoS admission control, dialect translation, rollups, cache, stats — before reaching real Postgres. Sharding and security aren't bolted on beside the pipeline — they're two of its eight stages, applied to every protocol identically. (gRPC is PolyWire's own native driver protocol, not an emulated foreign database — see full capabilities for what that means.)

Without PolyWire vs. with it

Without PolyWire

  • Different database infrastructure per protocol
  • A separate connection proxy
  • Different security controls per system
  • Different observability per system
  • Separate migration tooling
  • A separate, unguarded AI access path

With PolyWire

One gateway → Postgres.

  • Fewer systems to operate — one gateway instead of five databases' own tooling.
  • One place to govern workloads — the same firewall, QoS, and audit path for every protocol.
  • Standardize on Postgres — without rewriting every application first.

Why PolyWire?

CapabilityDirect to PostgresTraditional proxyPolyWire
Postgres wire protocol
Foreign DB protocols (Oracle, MySQL, SQL Server, MongoDB…)
Live dialect / semantic translation✓, every call
SQL firewallDB-side onlySome
Workload QoS / admission controlDB-side onlyLimited
Intelligent routingApp/DB-sideSome
ShardingApp/DB-sideSome
Distributed cachingSeparate system
AI / MCP access, same governed pathSeparate path
Unified observabilityMultiple layersProxy layer only

Comparison methodology →

Compatibility, honestly scoped

10Client protocols
8Real client stacks verified
Multi-AZFailover tested
5Managed Postgres platforms documented

Every row below is verified against that protocol's real client library, not a synthetic harness — this table states only what's actually confirmed today; see full capabilities and ERRORS.md for the complete per-protocol detail, including known limitations.

ProtocolClient tested againstBound parameters decodedNative error translationRLS identity
PostgreSQLpsycopg2✓ (native SQLSTATE)
Oraclepython-oracledb, SQLcl, JDBC✓ (ORA-NNNNN)
SQL Serverpython-tds / pymssql, JDBC
MySQLMySQL CLI, JDBC✓ (errno)
MongoDBmongodb-driver-sync, mongoshHash by _id✓ (code/codeName)
DynamoDBAWS SDK v2Hash by partition key✓ (AWS exception names)
Amazon SQSboto3Hash by queue name✓ (AWS error codes)
OpenSearchopensearch-pyHash by doc_id✓ (error.type/reason)

"—" means not yet implemented for that protocol, stated plainly rather than omitted — see Security for exactly which protocols propagate a real per-caller identity today.

Built for production

Schedule a PolyWire Architecture Review →

Your infrastructure. Your Postgres.

Docker · Kubernetes · AWS · Azure · GCP · OCI · On-prem

Run PolyWire next to the applications and databases you already operate — no managed control plane required.

02

Pricing

Same PolyWire, same protocols, same capabilities — Developer and Enterprise differ on scale and commercial rights, not features. Nothing that makes PolyWire what it is — SQL translation, the firewall, sharding, QoS, caching, HA/failover — is held back for a paid tier: an evaluation on Developer proves the exact architecture you'd run in production.

Developer

$0 / forever

For evaluation, development, demos, and migration testing.

  • All ten protocols — Postgres, MySQL, Oracle, SQL Server, MongoDB, DynamoDB, SQS, OpenSearch, gRPC, MCP
  • SQL translation, dialect rewrite, and rollup acceleration
  • SQL firewall, connection ACL, and every policy engine
  • Routing and sharding, all strategies
  • QoS admission control
  • Query result caching (PolyCache)
  • Prometheus /metrics and OTEL export
  • HA, config propagation, and planned/unplanned failover — up to 3 instances
  • Up to 25 concurrent client connections per instance
  • Up to 3 Postgres backends
  • Community support only
  • Not licensed for commercial production use

Enterprise

Contact us

Simple infrastructure pricing. Per PolyWire instance — no per-protocol fees, no per-database fees. For production deployments of any size.

  • Everything in Developer, unrestricted
  • Unlimited concurrent client connections
  • Unlimited PolyWire instances
  • Unlimited Postgres backends
  • Full throughput, no admission-control ceiling beyond what you configure
  • Licensed for commercial production use
  • Enterprise support

Schedule a PolyWire Architecture Review →

Developer's connection/instance/backend limits are real, locally-enforced caps — not a time-limited trial and not a phone-home metering service. They're enough to run applications, demos, benchmarks, and a genuine three-instance HA/failover test; a meaningful production deployment will reach them quickly by design.

Ready to put PolyWire in front of Postgres?

Try it free — Developer Edition, all features, all ten protocols. Taking it to production? Bring your architecture and we'll help map the deployment.

03 ghcr.io/polygres26/polyadvisor

Also from PolyGres

PolyAdvisor — know before you migrate

PolyAdvisor plans the move to Postgres. PolyWire runs and governs workloads on Postgres. Assess → size → plan → move — Oracle, MySQL, MariaDB, SQL Server → Postgres, with a rules-based, reproducible difficulty score (not LLM-generated).

Explore PolyAdvisor — assessment, sizing, and PL/SQL review with an LLM's help →

04

Common questions

05

Contact

Considering PolyWire for production? Bring your architecture — we'll help map where PolyWire fits. Pick "Architecture Review" below.

Report an issue or ask a question — for either PolyWire or PolyAdvisor. Include what you were trying to do and, for a bug, what you expected vs. what happened. Goes straight to the team, no email address to copy or scrape.