151 lines
5.3 KiB
PL/PgSQL
151 lines
5.3 KiB
PL/PgSQL
BEGIN;
|
|
|
|
DO $$
|
|
BEGIN
|
|
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'uq_strategy_run_user_run') THEN
|
|
ALTER TABLE strategy_run
|
|
ADD CONSTRAINT uq_strategy_run_user_run UNIQUE (user_id, run_id);
|
|
END IF;
|
|
END $$;
|
|
|
|
DO $$
|
|
BEGIN
|
|
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_engine_status_user_run') THEN
|
|
ALTER TABLE engine_status
|
|
ADD CONSTRAINT fk_engine_status_user_run
|
|
FOREIGN KEY (user_id, run_id)
|
|
REFERENCES strategy_run(user_id, run_id)
|
|
ON DELETE CASCADE;
|
|
END IF;
|
|
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_engine_state_user_run') THEN
|
|
ALTER TABLE engine_state
|
|
ADD CONSTRAINT fk_engine_state_user_run
|
|
FOREIGN KEY (user_id, run_id)
|
|
REFERENCES strategy_run(user_id, run_id)
|
|
ON DELETE CASCADE;
|
|
END IF;
|
|
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_engine_state_paper_user_run') THEN
|
|
ALTER TABLE engine_state_paper
|
|
ADD CONSTRAINT fk_engine_state_paper_user_run
|
|
FOREIGN KEY (user_id, run_id)
|
|
REFERENCES strategy_run(user_id, run_id)
|
|
ON DELETE CASCADE;
|
|
END IF;
|
|
IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_paper_broker_account_user_run') THEN
|
|
ALTER TABLE paper_broker_account
|
|
ADD CONSTRAINT fk_paper_broker_account_user_run
|
|
FOREIGN KEY (user_id, run_id)
|
|
REFERENCES strategy_run(user_id, run_id)
|
|
ON DELETE CASCADE;
|
|
END IF;
|
|
END $$;
|
|
|
|
ALTER TABLE strategy_config ALTER COLUMN id TYPE bigint;
|
|
ALTER TABLE engine_state ALTER COLUMN id TYPE bigint;
|
|
ALTER TABLE engine_status ALTER COLUMN id TYPE bigint;
|
|
ALTER TABLE engine_state_paper ALTER COLUMN id TYPE bigint;
|
|
ALTER TABLE paper_broker_account ALTER COLUMN id TYPE bigint;
|
|
|
|
DO $$
|
|
BEGIN
|
|
IF EXISTS (
|
|
SELECT 1 FROM pg_attribute
|
|
WHERE attrelid = 'strategy_config'::regclass AND attname = 'id' AND attidentity = ''
|
|
) THEN
|
|
ALTER TABLE strategy_config ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY;
|
|
END IF;
|
|
IF EXISTS (
|
|
SELECT 1 FROM pg_attribute
|
|
WHERE attrelid = 'engine_state'::regclass AND attname = 'id' AND attidentity = ''
|
|
) THEN
|
|
ALTER TABLE engine_state ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY;
|
|
END IF;
|
|
IF EXISTS (
|
|
SELECT 1 FROM pg_attribute
|
|
WHERE attrelid = 'engine_status'::regclass AND attname = 'id' AND attidentity = ''
|
|
) THEN
|
|
ALTER TABLE engine_status ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY;
|
|
END IF;
|
|
IF EXISTS (
|
|
SELECT 1 FROM pg_attribute
|
|
WHERE attrelid = 'engine_state_paper'::regclass AND attname = 'id' AND attidentity = ''
|
|
) THEN
|
|
ALTER TABLE engine_state_paper ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY;
|
|
END IF;
|
|
IF EXISTS (
|
|
SELECT 1 FROM pg_attribute
|
|
WHERE attrelid = 'paper_broker_account'::regclass AND attname = 'id' AND attidentity = ''
|
|
) THEN
|
|
ALTER TABLE paper_broker_account ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY;
|
|
END IF;
|
|
END $$;
|
|
|
|
DO $$
|
|
DECLARE
|
|
seq_name text;
|
|
max_id bigint;
|
|
BEGIN
|
|
seq_name := pg_get_serial_sequence('strategy_config', 'id');
|
|
IF seq_name IS NOT NULL THEN
|
|
SELECT MAX(id) INTO max_id FROM strategy_config;
|
|
IF max_id IS NULL OR max_id < 1 THEN
|
|
EXECUTE format('SELECT setval(%L, 1, false)', seq_name);
|
|
ELSE
|
|
EXECUTE format('SELECT setval(%L, %s, true)', seq_name, max_id);
|
|
END IF;
|
|
END IF;
|
|
seq_name := pg_get_serial_sequence('engine_state', 'id');
|
|
IF seq_name IS NOT NULL THEN
|
|
SELECT MAX(id) INTO max_id FROM engine_state;
|
|
IF max_id IS NULL OR max_id < 1 THEN
|
|
EXECUTE format('SELECT setval(%L, 1, false)', seq_name);
|
|
ELSE
|
|
EXECUTE format('SELECT setval(%L, %s, true)', seq_name, max_id);
|
|
END IF;
|
|
END IF;
|
|
seq_name := pg_get_serial_sequence('engine_status', 'id');
|
|
IF seq_name IS NOT NULL THEN
|
|
SELECT MAX(id) INTO max_id FROM engine_status;
|
|
IF max_id IS NULL OR max_id < 1 THEN
|
|
EXECUTE format('SELECT setval(%L, 1, false)', seq_name);
|
|
ELSE
|
|
EXECUTE format('SELECT setval(%L, %s, true)', seq_name, max_id);
|
|
END IF;
|
|
END IF;
|
|
seq_name := pg_get_serial_sequence('engine_state_paper', 'id');
|
|
IF seq_name IS NOT NULL THEN
|
|
SELECT MAX(id) INTO max_id FROM engine_state_paper;
|
|
IF max_id IS NULL OR max_id < 1 THEN
|
|
EXECUTE format('SELECT setval(%L, 1, false)', seq_name);
|
|
ELSE
|
|
EXECUTE format('SELECT setval(%L, %s, true)', seq_name, max_id);
|
|
END IF;
|
|
END IF;
|
|
seq_name := pg_get_serial_sequence('paper_broker_account', 'id');
|
|
IF seq_name IS NOT NULL THEN
|
|
SELECT MAX(id) INTO max_id FROM paper_broker_account;
|
|
IF max_id IS NULL OR max_id < 1 THEN
|
|
EXECUTE format('SELECT setval(%L, 1, false)', seq_name);
|
|
ELSE
|
|
EXECUTE format('SELECT setval(%L, %s, true)', seq_name, max_id);
|
|
END IF;
|
|
END IF;
|
|
END $$;
|
|
|
|
DROP INDEX IF EXISTS idx_engine_state_user_run;
|
|
DROP INDEX IF EXISTS idx_engine_status_user_run;
|
|
DROP INDEX IF EXISTS idx_engine_state_paper_user_run;
|
|
DROP INDEX IF EXISTS idx_paper_broker_account_user_run;
|
|
|
|
DO $$
|
|
BEGIN
|
|
IF EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'chk_engine_state_paper_cash_non_negative') THEN
|
|
ALTER TABLE engine_state_paper VALIDATE CONSTRAINT chk_engine_state_paper_cash_non_negative;
|
|
END IF;
|
|
IF EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'chk_paper_broker_cash_non_negative') THEN
|
|
ALTER TABLE paper_broker_account VALIDATE CONSTRAINT chk_paper_broker_cash_non_negative;
|
|
END IF;
|
|
END $$;
|
|
|
|
COMMIT;
|