46 lines
1.8 KiB
PL/PgSQL
46 lines
1.8 KiB
PL/PgSQL
-- Asset transfers: replace from/to plant + warehouse columns with
|
|
-- from_location_id / to_location_id (either plant or warehouse).
|
|
-- Idempotent: safe to re-run.
|
|
|
|
BEGIN;
|
|
|
|
ALTER TABLE asset_transfers ADD COLUMN IF NOT EXISTS from_location_id BIGINT;
|
|
ALTER TABLE asset_transfers ADD COLUMN IF NOT EXISTS to_location_id BIGINT;
|
|
|
|
-- Backfill from old columns (prefer warehouse, else plant) when present
|
|
DO $$
|
|
BEGIN
|
|
IF EXISTS (
|
|
SELECT 1 FROM information_schema.columns
|
|
WHERE table_name = 'asset_transfers' AND column_name = 'from_plant_id'
|
|
) THEN
|
|
UPDATE asset_transfers
|
|
SET from_location_id = COALESCE(from_warehouse_id, from_plant_id)
|
|
WHERE from_location_id IS NULL;
|
|
UPDATE asset_transfers
|
|
SET to_location_id = COALESCE(to_warehouse_id, to_plant_id)
|
|
WHERE to_location_id IS NULL;
|
|
END IF;
|
|
END $$;
|
|
|
|
-- Drop old columns (FK constraints drop with them)
|
|
ALTER TABLE asset_transfers DROP COLUMN IF EXISTS from_plant_id;
|
|
ALTER TABLE asset_transfers DROP COLUMN IF EXISTS to_plant_id;
|
|
ALTER TABLE asset_transfers DROP COLUMN IF EXISTS from_warehouse_id;
|
|
ALTER TABLE asset_transfers DROP COLUMN IF EXISTS to_warehouse_id;
|
|
|
|
-- Foreign keys for the new columns
|
|
ALTER TABLE asset_transfers DROP CONSTRAINT IF EXISTS fk_at_from_location;
|
|
ALTER TABLE asset_transfers
|
|
ADD CONSTRAINT fk_at_from_location FOREIGN KEY (from_location_id) REFERENCES locations(id);
|
|
ALTER TABLE asset_transfers DROP CONSTRAINT IF EXISTS fk_at_to_location;
|
|
ALTER TABLE asset_transfers
|
|
ADD CONSTRAINT fk_at_to_location FOREIGN KEY (to_location_id) REFERENCES locations(id);
|
|
|
|
COMMIT;
|
|
|
|
-- Verify:
|
|
-- SELECT column_name FROM information_schema.columns
|
|
-- WHERE table_name = 'asset_transfers'
|
|
-- AND column_name IN ('from_location_id','to_location_id','from_plant_id','to_plant_id');
|