Commit 273ae970 authored by Tom Lane's avatar Tom Lane

Add a sanity check to make sure that all system catalogs that have OIDs

also have a unique index on OID.
parent 039cb479
...@@ -65,3 +65,19 @@ SELECT relname, relhasindex ...@@ -65,3 +65,19 @@ SELECT relname, relhasindex
tenk2 | t tenk2 | t
(53 rows) (53 rows)
--
-- another sanity check: every system catalog that has OIDs should have
-- a unique index on OID. This ensures that the OIDs will be unique,
-- even after the OID counter wraps around.
-- We exclude non-system tables from the check by looking at nspname.
--
SELECT relname, nspname
FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = relnamespace
WHERE relhasoids
AND ((nspname ~ '^pg_') IS NOT FALSE)
AND NOT EXISTS (SELECT 1 FROM pg_index i WHERE indrelid = c.oid
AND indkey[0] = -2 AND indkey[1] = 0 AND indisunique);
relname | nspname
---------+---------
(0 rows)
VACUUM; VACUUM;
-- --
-- sanity check, if we don't have indices the test will take years to -- sanity check, if we don't have indices the test will take years to
-- complete. But skip TOAST relations since they will have varying -- complete. But skip TOAST relations since they will have varying
...@@ -10,3 +10,15 @@ SELECT relname, relhasindex ...@@ -10,3 +10,15 @@ SELECT relname, relhasindex
WHERE relhasindex AND relkind != 't' WHERE relhasindex AND relkind != 't'
ORDER BY relname; ORDER BY relname;
--
-- another sanity check: every system catalog that has OIDs should have
-- a unique index on OID. This ensures that the OIDs will be unique,
-- even after the OID counter wraps around.
-- We exclude non-system tables from the check by looking at nspname.
--
SELECT relname, nspname
FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = relnamespace
WHERE relhasoids
AND ((nspname ~ '^pg_') IS NOT FALSE)
AND NOT EXISTS (SELECT 1 FROM pg_index i WHERE indrelid = c.oid
AND indkey[0] = -2 AND indkey[1] = 0 AND indisunique);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment