The optional real-DB end-to-end test self-skipped without a DB but would
have errored WITH one (the safety fixture never actually ran). Fixed two
schema bugs + one impossible-collision setup, validated against a live
PostGIS 16 container (test now passes end-to-end, not just collected):
- houses_price_dynamics insert used a non-existent `avg_price` column →
`price_per_sqm` (the real NOT NULL value column, migration 024). The two
rows share all 5 dim fields with differing house_id → a genuine LIVE
6-col UNIQUE collision the dedup step must resolve. Also assert the
surviving row is the keeper's own (price_per_sqm=100000, not 999999).
- listings insert omitted NOT NULL no-default columns → added source_url,
dedup_hash (also UNIQUE → distinct per row), price_rub (migration 002).
- house_sources UNIQUE(ext_source,ext_id) is GLOBAL, so the original
same-key-on-both-houses setup violated at INSERT time (before the merge).
Replaced with distinct loser/keeper source rows + assert the loser's row
re-points onto the keeper and none dangle on the deleted loser.
Still self-skips in CI (no Postgres) — correct; now valid against a
tunnel/local DB. Full suite 2444 passed / 0 failed; ruff clean.