Introduction
PGQViewer is a community graph viewer for PostgreSQL 19's native property graphs (SQL/PGQ, ISO/IEC 9075-16:2023). Connect, type a MATCH pattern, and explore the result on an interactive canvas.
What is SQL/PGQ?
SQL/PGQ brings property-graph queries into the SQL standard, and PostgreSQL 19 is the first major open-source SQL database to implement it natively. A property graph in PostgreSQL is metadata over the relational tables you already have: a CREATE PROPERTY GRAPH statement declares which tables are vertices, which are edges, and how they connect. Patterns you write in MATCH are rewritten by the planner into ordinary joins — there is no separate storage engine, no migration, and no extension to install.
(a IS person)-[k IS knows]->(b IS person)See the PostgreSQL documentation on CREATE PROPERTY GRAPH and graph queries for the underlying feature.
What PGQViewer does
PGQViewer focuses on doing one thing well: viewing.
- Read — it introspects PG19's
pg_propgraph_*catalogs: every property graph visible to your role, every label, every typed property, with planner row estimates. - Draw — results render on a Cytoscape canvas with stable per-label colors, degree-sized nodes, true source → destination arrows, and fourteen layouts.
- Export — PNG, JPG, GraphML, idempotent Cypher
MERGEscripts, CSV, and JSON.
There is deliberately no graph designer, notebook, privileges UI, or schema diff. Graph mode only ever issues SELECT statements, and nothing is cached or copied — every query runs live against your database.
Status
PGQViewer is alpha, under active development. It is tested against the official PostgreSQL 19 Beta 1 release (June 2026). PG19 GA is expected around September–October 2026; catalog and error-message details may still shift between betas, and the project tracks them release by release. Issues and contributions are very welcome on GitHub.
Architecture in one paragraph
PGQViewer ships as a single Docker container (or a single Go binary) containing a React + Cytoscape web UI and a Go API (chi + pgx). The browser talks HTTP and NDJSON to the Go server at /api/v1; the Go server talks TCP/TLS to your PostgreSQL 19 — and that is the only thing it talks to. The web UI is embedded in the executable with go:embed, so there is exactly one process to run.