All checks were successful
Deploy Trade-In / changes (push) Successful in 6s
Deploy / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy / build-frontend (push) Has been skipped
Deploy Trade-In / test (push) Successful in 26s
Deploy Trade-In / build-backend (push) Successful in 25s
Deploy / build-backend (push) Successful in 1m30s
Deploy Trade-In / deploy (push) Successful in 37s
Deploy / build-worker (push) Successful in 2m54s
Deploy / deploy (push) Successful in 1m8s
Co-authored-by: bot-backend <bot-backend@gendsgn.local> Co-committed-by: bot-backend <bot-backend@gendsgn.local>
58 lines
2.7 KiB
PL/PgSQL
58 lines
2.7 KiB
PL/PgSQL
-- 085_quarter_price_index_fdw.sql
|
|
-- Issue #762 — Foreign table over MAIN DB's mv_quarter_price_index MV.
|
|
--
|
|
-- Context:
|
|
-- #760 (PR #792) created public.mv_quarter_price_index in the MAIN gendesign DB.
|
|
-- The estimator (#647-3) needs O(1) lookup by quarter_cad_number without a
|
|
-- cross-service HTTP round-trip. FDW foreign table lets tradein read the MV
|
|
-- directly via the already-established gendesign_remote server.
|
|
--
|
|
-- Reused infra:
|
|
-- SERVER gendesign_remote — created by 060_postgres_fdw_extension.sql.
|
|
-- Pattern: per-table FOREIGN TABLE (not IMPORT FOREIGN SCHEMA) — matches repo convention.
|
|
-- USER MAPPING is managed at backend startup from env (see 060_postgres_fdw_extension.sql).
|
|
--
|
|
-- Column mapping (verified against live MV via pg_attribute, 2026-05-30):
|
|
-- quarter_cad_number character varying(30) → varchar(30) / text (FDW accepts text for varchar)
|
|
-- price_index double precision → double precision
|
|
-- n_deals bigint → bigint
|
|
-- basis text → text
|
|
-- computed_at timestamp with time zone → timestamptz
|
|
--
|
|
-- Index note:
|
|
-- The remote MV has UNIQUE index mv_quarter_price_index_uq on quarter_cad_number.
|
|
-- FDW pushes equality predicates (WHERE quarter_cad_number = $1) down to MAIN,
|
|
-- so remote index gives O(1) lookup. No local index on the foreign table is needed
|
|
-- or possible (postgres_fdw does not support local indexes on foreign tables).
|
|
--
|
|
-- Idempotency:
|
|
-- DROP FOREIGN TABLE IF EXISTS → CREATE is safe to re-apply.
|
|
-- BEGIN/COMMIT per sql.md conventions.
|
|
--
|
|
-- Apply order:
|
|
-- After 060_postgres_fdw_extension.sql (server must exist).
|
|
-- After 99a_quarter_price_index.sql is applied in MAIN (MV must exist remotely).
|
|
-- Before estimator code referencing this table is deployed (#647-3).
|
|
|
|
BEGIN;
|
|
|
|
DROP FOREIGN TABLE IF EXISTS quarter_price_index;
|
|
|
|
CREATE FOREIGN TABLE quarter_price_index (
|
|
quarter_cad_number varchar(30) NOT NULL,
|
|
price_index double precision NOT NULL,
|
|
n_deals bigint NOT NULL,
|
|
basis text NOT NULL,
|
|
computed_at timestamp with time zone NOT NULL
|
|
)
|
|
SERVER gendesign_remote
|
|
OPTIONS (schema_name 'public', table_name 'mv_quarter_price_index');
|
|
|
|
COMMENT ON FOREIGN TABLE quarter_price_index IS
|
|
'FDW read-only view of gendesign.public.mv_quarter_price_index. '
|
|
'Per-cadastral-quarter price index normalised to EKB city median (=1.0). '
|
|
'Lookup by quarter_cad_number is O(1) via remote UNIQUE index on MAIN. '
|
|
'Refresh cadence: MAIN refreshes MV via Celery beat (see quarter_price_index_refresh task). '
|
|
'Issue: #762. Source MV: #760.';
|
|
|
|
COMMIT;
|