Fix inconsistencies for queries on pg_class in type_sanity.sql

Three queries did not consider partitioned indexes and tables, and
surrounding comments have not been updated in a while.

Like 4b9fbd6be4, this is only cosmetic currently as no such relkinds
exist at this stage of the regression tests, but running these queries
on existing clusters could lead to incorrect results.

Author: Jian He, Michael Paquier
Discussion: https://postgr.es/m/CACJufxGsB1ciahkNDccyxhw-Pfp_-_y+Wx+1BOdRyVVxKojAbg@mail.gmail.com
This commit is contained in:
Michael Paquier 2023-11-12 10:06:51 +09:00
parent b7f315c9d7
commit a9f19c1349
2 changed files with 16 additions and 12 deletions

View File

@ -507,28 +507,30 @@ WHERE relkind NOT IN ('r', 'i', 'S', 't', 'v', 'm', 'c', 'f', 'p', 'I') OR
-----+--------- -----+---------
(0 rows) (0 rows)
-- All tables and indexes should have an access method. -- All tables, indexes, partitioned indexes and matviews should have an
-- access method.
SELECT c1.oid, c1.relname SELECT c1.oid, c1.relname
FROM pg_class as c1 FROM pg_class as c1
WHERE c1.relkind NOT IN ('S', 'v', 'f', 'c') and WHERE c1.relkind NOT IN ('S', 'v', 'f', 'c', 'p') and
c1.relam = 0; c1.relam = 0;
oid | relname oid | relname
-----+--------- -----+---------
(0 rows) (0 rows)
-- Conversely, sequences, views, types shouldn't have them -- Conversely, sequences, views, foreign tables, types and partitioned
-- tables shouldn't have them.
SELECT c1.oid, c1.relname SELECT c1.oid, c1.relname
FROM pg_class as c1 FROM pg_class as c1
WHERE c1.relkind IN ('S', 'v', 'f', 'c') and WHERE c1.relkind IN ('S', 'v', 'f', 'c', 'p') and
c1.relam != 0; c1.relam != 0;
oid | relname oid | relname
-----+--------- -----+---------
(0 rows) (0 rows)
-- Indexes should have AMs of type 'i' -- Indexes and partitioned indexes should have AMs of type 'i'.
SELECT pc.oid, pc.relname, pa.amname, pa.amtype SELECT pc.oid, pc.relname, pa.amname, pa.amtype
FROM pg_class as pc JOIN pg_am AS pa ON (pc.relam = pa.oid) FROM pg_class as pc JOIN pg_am AS pa ON (pc.relam = pa.oid)
WHERE pc.relkind IN ('i') and WHERE pc.relkind IN ('i', 'I') and
pa.amtype != 'i'; pa.amtype != 'i';
oid | relname | amname | amtype oid | relname | amname | amtype
-----+---------+--------+-------- -----+---------+--------+--------

View File

@ -364,22 +364,24 @@ WHERE relkind NOT IN ('r', 'i', 'S', 't', 'v', 'm', 'c', 'f', 'p', 'I') OR
relpersistence NOT IN ('p', 'u', 't') OR relpersistence NOT IN ('p', 'u', 't') OR
relreplident NOT IN ('d', 'n', 'f', 'i'); relreplident NOT IN ('d', 'n', 'f', 'i');
-- All tables and indexes should have an access method. -- All tables, indexes, partitioned indexes and matviews should have an
-- access method.
SELECT c1.oid, c1.relname SELECT c1.oid, c1.relname
FROM pg_class as c1 FROM pg_class as c1
WHERE c1.relkind NOT IN ('S', 'v', 'f', 'c') and WHERE c1.relkind NOT IN ('S', 'v', 'f', 'c', 'p') and
c1.relam = 0; c1.relam = 0;
-- Conversely, sequences, views, types shouldn't have them -- Conversely, sequences, views, foreign tables, types and partitioned
-- tables shouldn't have them.
SELECT c1.oid, c1.relname SELECT c1.oid, c1.relname
FROM pg_class as c1 FROM pg_class as c1
WHERE c1.relkind IN ('S', 'v', 'f', 'c') and WHERE c1.relkind IN ('S', 'v', 'f', 'c', 'p') and
c1.relam != 0; c1.relam != 0;
-- Indexes should have AMs of type 'i' -- Indexes and partitioned indexes should have AMs of type 'i'.
SELECT pc.oid, pc.relname, pa.amname, pa.amtype SELECT pc.oid, pc.relname, pa.amname, pa.amtype
FROM pg_class as pc JOIN pg_am AS pa ON (pc.relam = pa.oid) FROM pg_class as pc JOIN pg_am AS pa ON (pc.relam = pa.oid)
WHERE pc.relkind IN ('i') and WHERE pc.relkind IN ('i', 'I') and
pa.amtype != 'i'; pa.amtype != 'i';
-- Tables, matviews etc should have AMs of type 't' -- Tables, matviews etc should have AMs of type 't'