pg_upgrade: check for types removed in pg12
Commit cda6a8d01d39 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
This commit is contained in:
parent
c1609cf3c0
commit
2e3dc8c148
@ -26,6 +26,9 @@ static void check_for_tables_with_oids(ClusterInfo *cluster);
|
||||
static void check_for_composite_data_type_usage(ClusterInfo *cluster);
|
||||
static void check_for_reg_data_type_usage(ClusterInfo *cluster);
|
||||
static void check_for_aclitem_data_type_usage(ClusterInfo *cluster);
|
||||
static void check_for_removed_data_type_usage(ClusterInfo *cluster,
|
||||
const char *version,
|
||||
const char *datatype);
|
||||
static void check_for_jsonb_9_4_usage(ClusterInfo *cluster);
|
||||
static void check_for_pg_role_prefix(ClusterInfo *cluster);
|
||||
static void check_for_new_tablespace_dir(void);
|
||||
@ -111,6 +114,16 @@ check_and_dump_old_cluster(bool live_check)
|
||||
if (GET_MAJOR_VERSION(old_cluster.major_version) <= 1500)
|
||||
check_for_aclitem_data_type_usage(&old_cluster);
|
||||
|
||||
/*
|
||||
* PG 12 removed types abstime, reltime, tinterval.
|
||||
*/
|
||||
if (GET_MAJOR_VERSION(old_cluster.major_version) <= 1100)
|
||||
{
|
||||
check_for_removed_data_type_usage(&old_cluster, "12", "abstime");
|
||||
check_for_removed_data_type_usage(&old_cluster, "12", "reltime");
|
||||
check_for_removed_data_type_usage(&old_cluster, "12", "tinterval");
|
||||
}
|
||||
|
||||
/*
|
||||
* PG 14 changed the function signature of encoding conversion functions.
|
||||
* Conversions from older versions cannot be upgraded automatically
|
||||
@ -1215,7 +1228,8 @@ check_for_aclitem_data_type_usage(ClusterInfo *cluster)
|
||||
{
|
||||
char output_path[MAXPGPATH];
|
||||
|
||||
prep_status("Checking for incompatible \"aclitem\" data type in user tables");
|
||||
prep_status("Checking for incompatible \"%s\" data type in user tables",
|
||||
"aclitem");
|
||||
|
||||
snprintf(output_path, sizeof(output_path), "tables_using_aclitem.txt");
|
||||
|
||||
@ -1233,6 +1247,41 @@ check_for_aclitem_data_type_usage(ClusterInfo *cluster)
|
||||
check_ok();
|
||||
}
|
||||
|
||||
/*
|
||||
* check_for_removed_data_type_usage
|
||||
*
|
||||
* Check for in-core data types that have been removed. Callers know
|
||||
* the exact list.
|
||||
*/
|
||||
static void
|
||||
check_for_removed_data_type_usage(ClusterInfo *cluster, const char *version,
|
||||
const char *datatype)
|
||||
{
|
||||
char output_path[MAXPGPATH];
|
||||
char typename[NAMEDATALEN];
|
||||
|
||||
prep_status("Checking for removed \"%s\" data type in user tables",
|
||||
datatype);
|
||||
|
||||
snprintf(output_path, sizeof(output_path), "tables_using_%s.txt",
|
||||
datatype);
|
||||
snprintf(typename, sizeof(typename), "pg_catalog.%s", datatype);
|
||||
|
||||
if (check_for_data_type_usage(cluster, typename, output_path))
|
||||
{
|
||||
pg_log(PG_REPORT, "fatal");
|
||||
pg_fatal("Your installation contains the \"%s\" data type in user tables.\n"
|
||||
"The \"%s\" type has been removed in PostgreSQL version %s,\n"
|
||||
"so this cluster cannot currently be upgraded. You can drop the\n"
|
||||
"problem columns, or change them to another data type, and restart\n"
|
||||
"the upgrade. A list of the problem columns is in the file:\n"
|
||||
" %s", datatype, datatype, version, output_path);
|
||||
}
|
||||
else
|
||||
check_ok();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* check_for_jsonb_9_4_usage()
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user