Prevent failure in setup step 69 if cache.objects does not exist (#11673)

# Which Problems Are Solved

If the `cache.objects`-table does not exist setup failes with the
following error:

`ERROR:  relation "cache.objects" does not exist at character 44`

# How the Problems Are Solved

Changed statement to prevent immediately throw an error if the table is
missing.

# Additional Context

- reported in
https://discord.com/channels/927474939156643850/1473769282880934089
- backport to v4
This commit is contained in:
Silvan
2026-02-24 09:51:22 +00:00
committed by GitHub
parent ab0f045499
commit 839a2d3b5b
+16 -20
View File
@@ -1,22 +1,14 @@
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;
-- Convert objects to logged first (if unlogged)
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 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
-- 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
@@ -26,12 +18,16 @@ BEGIN
FOREIGN KEY(cache_name, object_id)
REFERENCES cache.objects(cache_name, id)
ON DELETE CASCADE;
END IF;
END IF;
CREATE UNLOGGED TABLE IF NOT EXISTS cache.objects_default
PARTITION OF cache.objects DEFAULT;
IF to_regclass('cache.objects') IS NOT NULL THEN
CREATE UNLOGGED TABLE IF NOT EXISTS cache.objects_default
PARTITION OF cache.objects DEFAULT;
END IF;
CREATE UNLOGGED TABLE IF NOT EXISTS cache.string_keys_default
PARTITION OF cache.string_keys DEFAULT;
IF to_regclass('cache.string_keys') IS NOT NULL THEN
CREATE UNLOGGED TABLE IF NOT EXISTS cache.string_keys_default
PARTITION OF cache.string_keys DEFAULT;
END IF;
END
$do$