@@ -26,6 +26,9 @@ static void check_for_tables_with_oids(ClusterInfo *cluster);
26
26
static void check_for_composite_data_type_usage (ClusterInfo * cluster );
27
27
static void check_for_reg_data_type_usage (ClusterInfo * cluster );
28
28
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 );
29
32
static void check_for_jsonb_9_4_usage (ClusterInfo * cluster );
30
33
static void check_for_pg_role_prefix (ClusterInfo * cluster );
31
34
static void check_for_new_tablespace_dir (void );
@@ -111,6 +114,16 @@ check_and_dump_old_cluster(bool live_check)
111
114
if (GET_MAJOR_VERSION (old_cluster .major_version ) <= 1500 )
112
115
check_for_aclitem_data_type_usage (& old_cluster );
113
116
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
+
114
127
/*
115
128
* PG 14 changed the function signature of encoding conversion functions.
116
129
* Conversions from older versions cannot be upgraded automatically
@@ -1215,7 +1228,8 @@ check_for_aclitem_data_type_usage(ClusterInfo *cluster)
1215
1228
{
1216
1229
char output_path [MAXPGPATH ];
1217
1230
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" );
1219
1233
1220
1234
snprintf (output_path , sizeof (output_path ), "tables_using_aclitem.txt" );
1221
1235
@@ -1233,6 +1247,41 @@ check_for_aclitem_data_type_usage(ClusterInfo *cluster)
1233
1247
check_ok ();
1234
1248
}
1235
1249
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
+
1236
1285
/*
1237
1286
* check_for_jsonb_9_4_usage()
1238
1287
*
0 commit comments