92 lines
3.4 KiB
Plaintext
92 lines
3.4 KiB
Plaintext
--
|
|
-- MISC_SANITY
|
|
-- Sanity checks for common errors in making system tables that don't fit
|
|
-- comfortably into either opr_sanity or type_sanity.
|
|
--
|
|
-- Every test failure in this file should be closely inspected.
|
|
-- The description of the failing test should be read carefully before
|
|
-- adjusting the expected output. In most cases, the queries should
|
|
-- not find *any* matching entries.
|
|
--
|
|
-- NB: run this test early, because some later tests create bogus entries.
|
|
-- **************** pg_depend ****************
|
|
-- Look for illegal values in pg_depend fields.
|
|
SELECT *
|
|
FROM pg_depend as d1
|
|
WHERE refclassid = 0 OR refobjid = 0 OR
|
|
classid = 0 OR objid = 0 OR
|
|
deptype NOT IN ('a', 'e', 'i', 'n', 'x', 'P', 'S');
|
|
classid | objid | objsubid | refclassid | refobjid | refobjsubid | deptype
|
|
---------+-------+----------+------------+----------+-------------+---------
|
|
(0 rows)
|
|
|
|
-- **************** pg_shdepend ****************
|
|
-- Look for illegal values in pg_shdepend fields.
|
|
SELECT *
|
|
FROM pg_shdepend as d1
|
|
WHERE refclassid = 0 OR refobjid = 0 OR
|
|
classid = 0 OR objid = 0 OR
|
|
deptype NOT IN ('a', 'o', 'r', 't');
|
|
dbid | classid | objid | objsubid | refclassid | refobjid | deptype
|
|
------+---------+-------+----------+------------+----------+---------
|
|
(0 rows)
|
|
|
|
-- **************** pg_class ****************
|
|
-- Look for system tables with varlena columns but no toast table. All
|
|
-- system tables with toastable columns should have toast tables, with
|
|
-- the following exceptions:
|
|
-- 1. pg_class, pg_attribute, and pg_index, due to fear of recursive
|
|
-- dependencies as toast tables depend on them.
|
|
-- 2. pg_largeobject and pg_largeobject_metadata. Large object catalogs
|
|
-- and toast tables are mutually exclusive and large object data is handled
|
|
-- as user data by pg_upgrade, which would cause failures.
|
|
SELECT relname, attname, atttypid::regtype
|
|
FROM pg_class c JOIN pg_attribute a ON c.oid = attrelid
|
|
WHERE c.oid < 16384 AND
|
|
reltoastrelid = 0 AND
|
|
relkind = 'r' AND
|
|
attstorage != 'p'
|
|
ORDER BY 1, 2;
|
|
relname | attname | atttypid
|
|
-------------------------+---------------+--------------
|
|
pg_attribute | attacl | aclitem[]
|
|
pg_attribute | attfdwoptions | text[]
|
|
pg_attribute | attmissingval | anyarray
|
|
pg_attribute | attoptions | text[]
|
|
pg_class | relacl | aclitem[]
|
|
pg_class | reloptions | text[]
|
|
pg_class | relpartbound | pg_node_tree
|
|
pg_index | indexprs | pg_node_tree
|
|
pg_index | indpred | pg_node_tree
|
|
pg_largeobject | data | bytea
|
|
pg_largeobject_metadata | lomacl | aclitem[]
|
|
(11 rows)
|
|
|
|
-- system catalogs without primary keys
|
|
--
|
|
-- Current exceptions:
|
|
-- * pg_depend, pg_shdepend don't have a unique key
|
|
SELECT relname
|
|
FROM pg_class
|
|
WHERE relnamespace = 'pg_catalog'::regnamespace AND relkind = 'r'
|
|
AND pg_class.oid NOT IN (SELECT indrelid FROM pg_index WHERE indisprimary)
|
|
ORDER BY 1;
|
|
relname
|
|
-------------
|
|
pg_depend
|
|
pg_shdepend
|
|
(2 rows)
|
|
|
|
-- system catalog unique indexes not wrapped in a constraint
|
|
-- (There should be none.)
|
|
SELECT relname
|
|
FROM pg_class c JOIN pg_index i ON c.oid = i.indexrelid
|
|
WHERE relnamespace = 'pg_catalog'::regnamespace AND relkind = 'i'
|
|
AND i.indisunique
|
|
AND c.oid NOT IN (SELECT conindid FROM pg_constraint)
|
|
ORDER BY 1;
|
|
relname
|
|
---------
|
|
(0 rows)
|
|
|