Skip to content

fix: virtual edges crash on every real Postgres source (dict_row) - #8

Merged
cunicopia-dev merged 1 commit into
mainfrom
fix/postgres-virtual-edge-dict-row
Jun 22, 2026
Merged

cunicopia-dev merged 1 commit into
mainfrom
fix/postgres-virtual-edge-dict-row

Conversation

@cunicopia-dev

Copy link
Copy Markdown
Owner

The bug

virtual.resolve() does dict(row) on each result row. The postgres branch of _connect opened the connection with psycopg's default tuple row factory, so dict(row) raised on the first real Postgres traversal. 0.1.6's virtual-edge Postgres path was effectively broken — the sqlite stand-in tests never exercised the postgres branch, so it shipped.

The fix

Open psycopg connections with row_factory=dict_row. One line.

Test

Adds a live-Postgres regression test gated on KG_TEST_PG_DSN (skips without a writable test DB) that exercises the real psycopg path and would have caught this.

Verified against a real production Postgres warehouse (3.3M-row 13F dataset): multi-hop virtual-edge traversals resolve correctly.

version 0.1.6 -> 0.1.7

🤖 Generated with Claude Code

resolve() does dict(row) on each result, but the postgres branch of _connect
opened the connection with psycopg's default tuple row factory, so dict(row)
raised on the first real Postgres traversal. 0.1.6's virtual-edge postgres path
was effectively broken; the sqlite stand-in tests never exercised it.

Fix: open psycopg connections with row_factory=dict_row. Adds a live-postgres
regression test (gated on KG_TEST_PG_DSN) that would have caught it.

Verified against a real production Postgres warehouse (3.3M-row 13F dataset):
multi-hop virtual-edge traversals resolve correctly.

version 0.1.6 -> 0.1.7

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@cunicopia-dev
cunicopia-dev merged commit c45689f into main Jun 22, 2026
4 checks passed
@cunicopia-dev
cunicopia-dev deleted the fix/postgres-virtual-edge-dict-row branch June 22, 2026 12:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant