db-api/sql/migrations/2025-12-16--01--add_place_lat_long.up.sql:
-- db-api/sql/migrations/2025-12-16--01--add_place_lat_long.up.sql
BEGIN;
ALTER TABLE place
ADD COLUMN IF NOT EXISTS latitude DOUBLE PRECISION,
ADD COLUMN IF NOT EXISTS longitude DOUBLE PRECISION;
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1
FROM pg_constraint c
JOIN pg_class t ON t.oid = c.conrelid
WHERE t.relname = 'place' AND c.conname = 'place_latitude_range'
) THEN
ALTER TABLE place
ADD CONSTRAINT place_latitude_range
CHECK (latitude IS NULL OR (latitude BETWEEN -90 AND 90))
NOT VALID;
END IF;
IF NOT EXISTS (
SELECT 1
FROM pg_constraint c
JOIN pg_class t ON t.oid = c.conrelid
WHERE t.relname = 'place' AND c.conname = 'place_longitude_range'
) THEN
ALTER TABLE place
ADD CONSTRAINT place_longitude_range
CHECK (longitude IS NULL OR (longitude BETWEEN -180 AND 180))
NOT VALID;
END IF;
END$$;
ALTER TABLE place VALIDATE CONSTRAINT place_latitude_range;
ALTER TABLE place VALIDATE CONSTRAINT place_longitude_range;
CREATE INDEX IF NOT EXISTS idx_place_latitude ON place (latitude);
CREATE INDEX IF NOT EXISTS idx_place_longitude ON place (longitude);
COMMIT;
db-api/sql/migrations/2025-12-17--01--add_address_components.up.sql:
ALTER TABLE place
ADD COLUMN IF NOT EXISTS address_components_raw JSONB,
ADD COLUMN IF NOT EXISTS address_context_label TEXT,
ADD COLUMN IF NOT EXISTS address_line1 TEXT,
ADD COLUMN IF NOT EXISTS address_line1_alt TEXT,
ADD COLUMN IF NOT EXISTS address_locality TEXT,
ADD COLUMN IF NOT EXISTS address_postal_code TEXT,
ADD COLUMN IF NOT EXISTS address_admin_area_1 TEXT,
ADD COLUMN IF NOT EXISTS address_country_code TEXT;
-- Optional: lightweight indexes for the queries you’ll actually run
CREATE INDEX IF NOT EXISTS idx_place_addr_locality_admin
ON place (address_admin_area_1, address_locality);
CREATE INDEX IF NOT EXISTS idx_place_addr_postal
ON place (address_postal_code);
CREATE INDEX IF NOT EXISTS idx_place_addr_country
ON place (address_country_code);
CREATE INDEX IF NOT EXISTS idx_place_addr_raw_gin
ON place USING gin (address_components_raw);