On Mon, Jul 18, 2022 at 09:26:53PM -0500, Justin Pryzby wrote: > Sorry, I meant to send this earlier..
No problem. > It looks like you named the table "toast_relfilenodes", but then also store > to it data for non-toast tables. How about naming that index_relfilenodes? One difference with what I posted previously and 5fb5b6 is the addition of an extra regclass that stores the parent table, for reference in the output. > It's also a bit weird to call the column "relname" but use it to store the > ::regclass. You later need to cast the column to text, so you may as well > store it as text, either relname or oid::regclass. I have used "indname" at the end. > It seems like cluster.sql does this more succinctly. Except that this does not include the relfilenodes from the toast indexes, which is something I wanted to add a check for when it comes to both user tables and catalogs. > Why {4,5} ? Looks like a brain fade from here, while looking the relation names this generated. This could just match with an integer. -- Michael
diff --git a/src/bin/scripts/t/090_reindexdb.pl b/src/bin/scripts/t/090_reindexdb.pl index 864707ff92..b5fff5a9cf 100644 --- a/src/bin/scripts/t/090_reindexdb.pl +++ b/src/bin/scripts/t/090_reindexdb.pl @@ -40,7 +40,7 @@ my $toast_index = $node->safe_psql('postgres', # REINDEX operations. A set of relfilenodes is saved from the catalogs # and then compared with pg_class. $node->safe_psql('postgres', - 'CREATE TABLE toast_relfilenodes (parent regclass, indname regclass, relfilenode oid);' + 'CREATE TABLE index_relfilenodes (parent regclass, indname regclass, relfilenode oid);' ); # Save the relfilenode of a set of toast indexes, one from the catalog # pg_constraint and one from the test table. @@ -58,8 +58,8 @@ my $fetch_index_relfilenodes = qq{SELECT i.indrelid, a.oid, a.relfilenode JOIN pg_index i ON (i.indexrelid = a.oid) WHERE a.relname IN ('pg_constraint_oid_index', 'test1x')}; my $save_relfilenodes = - "INSERT INTO toast_relfilenodes $fetch_toast_relfilenodes;" - . "INSERT INTO toast_relfilenodes $fetch_index_relfilenodes;"; + "INSERT INTO index_relfilenodes $fetch_toast_relfilenodes;" + . "INSERT INTO index_relfilenodes $fetch_index_relfilenodes;"; # Query to compare a set of relfilenodes saved with the contents of pg_class. # Note that this does not join using OIDs, as CONCURRENTLY would change them @@ -68,10 +68,10 @@ my $save_relfilenodes = # based on the name is enough to ensure a fixed output, where the name of the # parent table is included to provide more context. my $compare_relfilenodes = qq(SELECT b.parent::regclass, - regexp_replace(b.indname::text, '(pg_toast.pg_toast_)\\d{4,5}(_index)', '\\1<oid>\\2'), + regexp_replace(b.indname::text, '(pg_toast.pg_toast_)\\d+(_index)', '\\1<oid>\\2'), CASE WHEN a.relfilenode = b.relfilenode THEN 'relfilenode is unchanged' ELSE 'relfilenode has changed' END - FROM toast_relfilenodes b + FROM index_relfilenodes b JOIN pg_class a ON b.indname::text = a.oid::regclass::text ORDER BY b.parent::text, b.indname::text); @@ -91,7 +91,7 @@ test1|test1x|relfilenode has changed), # Re-save and run the second one. $node->safe_psql('postgres', - "TRUNCATE toast_relfilenodes; $save_relfilenodes"); + "TRUNCATE index_relfilenodes; $save_relfilenodes"); $node->issues_sql_like( [ 'reindexdb', '-s', 'postgres' ], qr/statement: REINDEX SYSTEM postgres;/,
signature.asc
Description: PGP signature