- pgSchema tables for auth, money, house, ref, games, cs, animaldex, site, meta (lists excluded via schemaFilter; runtime list tables are managed by meta.*) - drizzle/ baseline matches the reorged DB exactly (catalog diff = 0 on rehearsal) - db/reorg: one-time SQL that moves the flat public schema (rehearsed on a prod copy) - scripts/db-migrate.ts: migrator with --init to record the baseline and a guard against running the baseline on a non-empty, unrecorded database
33 lines
2.4 KiB
SQL
33 lines
2.4 KiB
SQL
-- 03_fixes.sql: missing PKs, type fixes, CHECKs, updated_at columns.
|
|
SET ROLE personal;
|
|
|
|
-- missing primary keys (promote the existing unique indexes)
|
|
ALTER TABLE cs.item_dimensions ADD CONSTRAINT item_dimensions_pkey PRIMARY KEY USING INDEX item_dimensions_unique_idx;
|
|
ALTER TABLE cs.price_streams ADD CONSTRAINT price_streams_pkey PRIMARY KEY USING INDEX price_streams_unique_idx;
|
|
ALTER TABLE house.price_history ADD CONSTRAINT price_history_pkey PRIMARY KEY (listing_id, observed_at);
|
|
DROP INDEX house.price_history_listing_idx; -- now covered by the PK
|
|
|
|
-- include_recurring was an int used as a boolean (app code: charts.ts `!== 0`)
|
|
ALTER TABLE money.projection_settings ALTER COLUMN include_recurring DROP DEFAULT;
|
|
ALTER TABLE money.projection_settings ALTER COLUMN include_recurring TYPE boolean USING include_recurring <> 0;
|
|
ALTER TABLE money.projection_settings ALTER COLUMN include_recurring SET DEFAULT true;
|
|
|
|
-- osu numbers stored as text (0 rows in prod)
|
|
ALTER TABLE games.osu_entries ALTER COLUMN pp TYPE numeric USING nullif(pp, '')::numeric;
|
|
ALTER TABLE games.osu_entries ALTER COLUMN accuracy TYPE numeric USING nullif(replace(accuracy, '%', ''), '')::numeric;
|
|
ALTER TABLE games.osu_entries ALTER COLUMN rate DROP DEFAULT;
|
|
ALTER TABLE games.osu_entries ALTER COLUMN rate TYPE numeric(4,2) USING nullif(rate, '')::numeric;
|
|
ALTER TABLE games.osu_entries ALTER COLUMN rate SET DEFAULT 1.00;
|
|
|
|
-- CHECKs matching the values the app already enforces (src/lib/server/money-tracker.ts, money page)
|
|
ALTER TABLE money.recurring ADD CONSTRAINT recurring_cadence_check CHECK (cadence IN ('weekly','monthly','yearly'));
|
|
ALTER TABLE money.insurances ADD CONSTRAINT insurances_cadence_check CHECK (cadence IN ('weekly','monthly','yearly'));
|
|
ALTER TABLE money.accounts ADD CONSTRAINT accounts_kind_check CHECK (kind IN ('spendable','investment'));
|
|
ALTER TABLE money.utility_settings ADD CONSTRAINT utility_settings_kind_check CHECK (kind IN ('electricity','gas','water'));
|
|
ALTER TABLE money.utility_readings ADD CONSTRAINT utility_readings_kind_check CHECK (kind IN ('electricity','gas','water'));
|
|
ALTER TABLE money.projection_settings ADD CONSTRAINT projection_settings_contribution_mode_check CHECK (contribution_mode IN ('excess','fixed'));
|
|
|
|
-- user-editable tables without updated_at
|
|
ALTER TABLE house.alert_rules ADD COLUMN updated_at timestamptz NOT NULL DEFAULT now();
|
|
RESET ROLE;
|