50 lines
1.3 KiB
PL/PgSQL
50 lines
1.3 KiB
PL/PgSQL
BEGIN;
|
|
|
|
ALTER TABLE subscriptions
|
|
ADD COLUMN IF NOT EXISTS custom_interval_value integer,
|
|
ADD COLUMN IF NOT EXISTS custom_interval_unit text;
|
|
|
|
DO $$
|
|
BEGIN
|
|
IF EXISTS (
|
|
SELECT 1
|
|
FROM information_schema.columns
|
|
WHERE table_name = 'subscriptions' AND column_name = 'custom_interval_days'
|
|
) THEN
|
|
UPDATE subscriptions
|
|
SET
|
|
custom_interval_value = COALESCE(custom_interval_value, custom_interval_days),
|
|
custom_interval_unit = CASE
|
|
WHEN custom_interval_days IS NOT NULL THEN COALESCE(custom_interval_unit, 'days')
|
|
ELSE custom_interval_unit
|
|
END;
|
|
END IF;
|
|
END $$;
|
|
|
|
ALTER TABLE subscriptions
|
|
DROP COLUMN IF EXISTS custom_interval_days;
|
|
|
|
DO $$
|
|
BEGIN
|
|
IF NOT EXISTS (
|
|
SELECT 1
|
|
FROM pg_constraint
|
|
WHERE conname = 'subscriptions_custom_interval_value_positive'
|
|
) THEN
|
|
ALTER TABLE subscriptions
|
|
ADD CONSTRAINT subscriptions_custom_interval_value_positive
|
|
CHECK (custom_interval_value > 0);
|
|
END IF;
|
|
IF NOT EXISTS (
|
|
SELECT 1
|
|
FROM pg_constraint
|
|
WHERE conname = 'subscriptions_custom_interval_unit_valid'
|
|
) THEN
|
|
ALTER TABLE subscriptions
|
|
ADD CONSTRAINT subscriptions_custom_interval_unit_valid
|
|
CHECK (custom_interval_unit IN ('days', 'weeks', 'months', 'years'));
|
|
END IF;
|
|
END $$;
|
|
|
|
COMMIT;
|