Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit8d48e6a

Browse files
committed
Improve the check for pg_catalog.line data type in pg_upgrade
The pg_upgrade check for pg_catalog.line data type when upgrading from9.3 had a couple of issues with domains and composite types. Firstly, ittriggered false positives for composite types unused in objects withstorage. This was enough to trigger an unnecessary pg_upgrade failure: CREATE TYPE line_composite AS (l pg_catalog.line)On the other hand, this only happened with composite types directly onthe pg_catalog.line data type, but not with a domain. So this was notdetected CREATE DOMAIN line_domain AS pg_catalog.line; CREATE TYPE line_composite_2 AS (l line_domain);unlike the first example. These false positives and inconsistencies areunfortunate, but what's worse we've failed to detected objects using thepg_catalog.line data type through a domain. So we missed cases like this CREATE TABLE t (l line_composite_2);The consequence is clusters broken after a pg_upgrade.This fixes these false positives and false negatives by using the samerecursive CTE introduced byeaf900e for sql_identifier. 9.3 did notsupport domains on composite types, but we can still have multi-levelcomposite types.Backpatch all the way to 9.4, where the format for pg_catalog.line datatype changed.Author: Tomas VondraBackpatch-to: 9.4-Discussion:https://postgr.es/m/16045-673e8fa6b5ace196%40postgresql.org
1 parentae5cae5 commit8d48e6a

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

‎src/bin/pg_upgrade/version.c

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,14 +131,42 @@ old_9_3_check_for_line_data_type_usage(ClusterInfo *cluster)
131131
DbInfo*active_db=&cluster->dbarr.dbs[dbnum];
132132
PGconn*conn=connectToServer(cluster,active_db->db_name);
133133

134+
/*
135+
* The pg_catalog.line type may be wrapped in a domain or composite
136+
* type, or both (9.3 did not allow domains on composite types, but
137+
* there may be multi-level composite type). To detect these cases
138+
* we need a recursive CTE.
139+
*/
134140
res=executeQueryOrDie(conn,
141+
"WITH RECURSIVE oids AS ( "
142+
/* the pg_catalog.line type itself */
143+
"SELECT 'pg_catalog.line'::pg_catalog.regtype AS oid "
144+
"UNION ALL "
145+
"SELECT * FROM ( "
146+
/* domains on the type */
147+
"WITH x AS (SELECT oid FROM oids) "
148+
"SELECT t.oid FROM pg_catalog.pg_type t, x WHERE typbasetype = x.oid AND typtype = 'd' "
149+
"UNION "
150+
/* composite types containing the type */
151+
"SELECT t.oid FROM pg_catalog.pg_type t, pg_catalog.pg_class c, pg_catalog.pg_attribute a, x "
152+
"WHERE t.typtype = 'c' AND "
153+
" t.oid = c.reltype AND "
154+
" c.oid = a.attrelid AND "
155+
" NOT a.attisdropped AND "
156+
" a.atttypid = x.oid "
157+
") foo "
158+
") "
135159
"SELECT n.nspname, c.relname, a.attname "
136160
"FROMpg_catalog.pg_class c, "
137161
"pg_catalog.pg_namespace n, "
138162
"pg_catalog.pg_attribute a "
139163
"WHEREc.oid = a.attrelid AND "
140164
"NOT a.attisdropped AND "
141-
"a.atttypid = 'pg_catalog.line'::pg_catalog.regtype AND "
165+
"a.atttypid IN (SELECT oid FROM oids) AND "
166+
"c.relkind IN ("
167+
CppAsString2(RELKIND_RELATION) ", "
168+
CppAsString2(RELKIND_MATVIEW)", "
169+
CppAsString2(RELKIND_INDEX)") AND "
142170
"c.relnamespace = n.oid AND "
143171
/* exclude possible orphaned temp tables */
144172
"n.nspname !~ '^pg_temp_' AND "

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp