Skip to content

Commit 2e3dc8c

Browse files
committed
pg_upgrade: check for types removed in pg12
Commit cda6a8d removed a few datatypes, but didn't update pg_upgrade --check to throw error if these types are used. So the users find that pg_upgrade --check tells them that everything is fine, only to fail when the real upgrade is attempted. Reviewed-by: Tristan Partin <tristan@neon.tech> Reviewed-by: Suraj Kharage <suraj.kharage@enterprisedb.com> Discussion: https://postgr.es/m/202309201654.ng4ksea25mti@alvherre.pgsql
1 parent c1609cf commit 2e3dc8c

File tree

1 file changed

+50
-1
lines changed

1 file changed

+50
-1
lines changed

src/bin/pg_upgrade/check.c

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ static void check_for_tables_with_oids(ClusterInfo *cluster);
2626
static void check_for_composite_data_type_usage(ClusterInfo *cluster);
2727
static void check_for_reg_data_type_usage(ClusterInfo *cluster);
2828
static void check_for_aclitem_data_type_usage(ClusterInfo *cluster);
29+
static void check_for_removed_data_type_usage(ClusterInfo *cluster,
30+
const char *version,
31+
const char *datatype);
2932
static void check_for_jsonb_9_4_usage(ClusterInfo *cluster);
3033
static void check_for_pg_role_prefix(ClusterInfo *cluster);
3134
static void check_for_new_tablespace_dir(void);
@@ -111,6 +114,16 @@ check_and_dump_old_cluster(bool live_check)
111114
if (GET_MAJOR_VERSION(old_cluster.major_version) <= 1500)
112115
check_for_aclitem_data_type_usage(&old_cluster);
113116

117+
/*
118+
* PG 12 removed types abstime, reltime, tinterval.
119+
*/
120+
if (GET_MAJOR_VERSION(old_cluster.major_version) <= 1100)
121+
{
122+
check_for_removed_data_type_usage(&old_cluster, "12", "abstime");
123+
check_for_removed_data_type_usage(&old_cluster, "12", "reltime");
124+
check_for_removed_data_type_usage(&old_cluster, "12", "tinterval");
125+
}
126+
114127
/*
115128
* PG 14 changed the function signature of encoding conversion functions.
116129
* Conversions from older versions cannot be upgraded automatically
@@ -1215,7 +1228,8 @@ check_for_aclitem_data_type_usage(ClusterInfo *cluster)
12151228
{
12161229
char output_path[MAXPGPATH];
12171230

1218-
prep_status("Checking for incompatible \"aclitem\" data type in user tables");
1231+
prep_status("Checking for incompatible \"%s\" data type in user tables",
1232+
"aclitem");
12191233

12201234
snprintf(output_path, sizeof(output_path), "tables_using_aclitem.txt");
12211235

@@ -1233,6 +1247,41 @@ check_for_aclitem_data_type_usage(ClusterInfo *cluster)
12331247
check_ok();
12341248
}
12351249

1250+
/*
1251+
* check_for_removed_data_type_usage
1252+
*
1253+
* Check for in-core data types that have been removed. Callers know
1254+
* the exact list.
1255+
*/
1256+
static void
1257+
check_for_removed_data_type_usage(ClusterInfo *cluster, const char *version,
1258+
const char *datatype)
1259+
{
1260+
char output_path[MAXPGPATH];
1261+
char typename[NAMEDATALEN];
1262+
1263+
prep_status("Checking for removed \"%s\" data type in user tables",
1264+
datatype);
1265+
1266+
snprintf(output_path, sizeof(output_path), "tables_using_%s.txt",
1267+
datatype);
1268+
snprintf(typename, sizeof(typename), "pg_catalog.%s", datatype);
1269+
1270+
if (check_for_data_type_usage(cluster, typename, output_path))
1271+
{
1272+
pg_log(PG_REPORT, "fatal");
1273+
pg_fatal("Your installation contains the \"%s\" data type in user tables.\n"
1274+
"The \"%s\" type has been removed in PostgreSQL version %s,\n"
1275+
"so this cluster cannot currently be upgraded. You can drop the\n"
1276+
"problem columns, or change them to another data type, and restart\n"
1277+
"the upgrade. A list of the problem columns is in the file:\n"
1278+
" %s", datatype, datatype, version, output_path);
1279+
}
1280+
else
1281+
check_ok();
1282+
}
1283+
1284+
12361285
/*
12371286
* check_for_jsonb_9_4_usage()
12381287
*

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy