diff --git a/cmd/setup/69.sql b/cmd/setup/69.sql index d8d8d3ec3..1cbf9b2b4 100644 --- a/cmd/setup/69.sql +++ b/cmd/setup/69.sql @@ -1,13 +1,31 @@ DO $do$ BEGIN + -- Convert objects to logged first (if unlogged) IF EXISTS (SELECT 1 FROM pg_class WHERE oid = 'cache.objects'::REGCLASS AND relpersistence = 'u') THEN ALTER TABLE IF EXISTS cache.objects SET LOGGED; END IF; - IF EXISTS (SELECT 1 FROM pg_class WHERE oid = 'cache.string_keys'::REGCLASS AND relpersistence = 'u') THEN + + -- Convert string_keys to logged (if unlogged) + -- Drop the FK constraint first to allow converting cache.string_keys (and avoid loggedness-change restrictions involving the FK) + IF EXISTS (SELECT 1 FROM pg_class WHERE oid = to_regclass('cache.objects') AND relpersistence = 'u') THEN + ALTER TABLE IF EXISTS cache.objects + SET LOGGED; + END IF; + + -- Convert string_keys to logged (if unlogged) + -- Drop the FK constraint first to avoid conflict with parent table conversion + IF EXISTS (SELECT 1 FROM pg_class WHERE oid = to_regclass('cache.string_keys') AND relpersistence = 'u') THEN + ALTER TABLE IF EXISTS cache.string_keys + DROP CONSTRAINT IF EXISTS fk_object; ALTER TABLE IF EXISTS cache.string_keys SET LOGGED; + ALTER TABLE IF EXISTS cache.string_keys + ADD CONSTRAINT fk_object + FOREIGN KEY(cache_name, object_id) + REFERENCES cache.objects(cache_name, id) + ON DELETE CASCADE; END IF; CREATE UNLOGGED TABLE IF NOT EXISTS cache.objects_default