PostgreSQL Source Code  git master
pg_upgrade.h
Go to the documentation of this file.
1 /*
2  * pg_upgrade.h
3  *
4  * Copyright (c) 2010-2021, PostgreSQL Global Development Group
5  * src/bin/pg_upgrade/pg_upgrade.h
6  */
7 
8 #include <unistd.h>
9 #include <assert.h>
10 #include <sys/stat.h>
11 #include <sys/time.h>
12 
13 #include "libpq-fe.h"
14 
15 /* Use port in the private/dynamic port number range */
16 #define DEF_PGUPORT 50432
17 
18 #define MAX_STRING 1024
19 #define QUERY_ALLOC 8192
20 
21 #define MESSAGE_WIDTH 60
22 
23 #define GET_MAJOR_VERSION(v) ((v) / 100)
24 
25 /* contains both global db information and CREATE DATABASE commands */
26 #define GLOBALS_DUMP_FILE "pg_upgrade_dump_globals.sql"
27 #define DB_DUMP_FILE_MASK "pg_upgrade_dump_%u.custom"
28 
29 #define DB_DUMP_LOG_FILE_MASK "pg_upgrade_dump_%u.log"
30 #define SERVER_LOG_FILE "pg_upgrade_server.log"
31 #define UTILITY_LOG_FILE "pg_upgrade_utility.log"
32 #define INTERNAL_LOG_FILE "pg_upgrade_internal.log"
33 
34 extern char *output_files[];
35 
36 /*
37  * WIN32 files do not accept writes from multiple processes
38  *
39  * On Win32, we can't send both pg_upgrade output and command output to the
40  * same file because we get the error: "The process cannot access the file
41  * because it is being used by another process." so send the pg_ctl
42  * command-line output to a new file, rather than into the server log file.
43  * Ideally we could use UTILITY_LOG_FILE for this, but some Windows platforms
44  * keep the pg_ctl output file open by the running postmaster, even after
45  * pg_ctl exits.
46  *
47  * We could use the Windows pgwin32_open() flags to allow shared file
48  * writes but is unclear how all other tools would use those flags, so
49  * we just avoid it and log a little differently on Windows; we adjust
50  * the error message appropriately.
51  */
52 #ifndef WIN32
53 #define SERVER_START_LOG_FILE SERVER_LOG_FILE
54 #define SERVER_STOP_LOG_FILE SERVER_LOG_FILE
55 #else
56 #define SERVER_START_LOG_FILE "pg_upgrade_server_start.log"
57 /*
58  * "pg_ctl start" keeps SERVER_START_LOG_FILE and SERVER_LOG_FILE open
59  * while the server is running, so we use UTILITY_LOG_FILE for "pg_ctl
60  * stop".
61  */
62 #define SERVER_STOP_LOG_FILE UTILITY_LOG_FILE
63 #endif
64 
65 
66 #ifndef WIN32
67 #define pg_mv_file rename
68 #define PATH_SEPARATOR '/'
69 #define PATH_QUOTE '\''
70 #define RM_CMD "rm -f"
71 #define RMDIR_CMD "rm -rf"
72 #define SCRIPT_PREFIX "./"
73 #define SCRIPT_EXT "sh"
74 #define ECHO_QUOTE "'"
75 #define ECHO_BLANK ""
76 #else
77 #define pg_mv_file pgrename
78 #define PATH_SEPARATOR '\\'
79 #define PATH_QUOTE '"'
80 /* @ prefix disables command echo in .bat files */
81 #define RM_CMD "@DEL /q"
82 #define RMDIR_CMD "@RMDIR /s/q"
83 #define SCRIPT_PREFIX ""
84 #define SCRIPT_EXT "bat"
85 #define EXE_EXT ".exe"
86 #define ECHO_QUOTE ""
87 #define ECHO_BLANK "."
88 #endif
89 
90 
91 /*
92  * postmaster/postgres -b (binary_upgrade) flag added during PG 9.1
93  * development
94  */
95 #define BINARY_UPGRADE_SERVER_FLAG_CAT_VER 201104251
96 
97 /*
98  * Visibility map changed with this 9.2 commit,
99  * 8f9fe6edce358f7904e0db119416b4d1080a83aa; pick later catalog version.
100  */
101 #define VISIBILITY_MAP_CRASHSAFE_CAT_VER 201107031
102 
103 /*
104  * The format of visibility map is changed with this 9.6 commit,
105  */
106 #define VISIBILITY_MAP_FROZEN_BIT_CAT_VER 201603011
107 
108 /*
109  * pg_multixact format changed in 9.3 commit 0ac5ad5134f2769ccbaefec73844f85,
110  * ("Improve concurrency of foreign key locking") which also updated catalog
111  * version to this value. pg_upgrade behavior depends on whether old and new
112  * server versions are both newer than this, or only the new one is.
113  */
114 #define MULTIXACT_FORMATCHANGE_CAT_VER 201301231
115 
116 /*
117  * large object chunk size added to pg_controldata,
118  * commit 5f93c37805e7485488480916b4585e098d3cc883
119  */
120 #define LARGE_OBJECT_SIZE_PG_CONTROL_VER 942
121 
122 /*
123  * change in JSONB format during 9.4 beta
124  */
125 #define JSONB_FORMAT_CHANGE_CAT_VER 201409291
126 
127 
128 /*
129  * Each relation is represented by a relinfo structure.
130  */
131 typedef struct
132 {
133  /* Can't use NAMEDATALEN; not guaranteed to be same on client */
134  char *nspname; /* namespace name */
135  char *relname; /* relation name */
136  Oid reloid; /* relation OID */
137  Oid relfilenode; /* relation file node */
138  Oid indtable; /* if index, OID of its table, else 0 */
139  Oid toastheap; /* if toast table, OID of base table, else 0 */
140  char *tablespace; /* tablespace path; "" for cluster default */
141  bool nsp_alloc; /* should nspname be freed? */
142  bool tblsp_alloc; /* should tablespace be freed? */
143 } RelInfo;
144 
145 typedef struct
146 {
148  int nrels;
149 } RelInfoArr;
150 
151 /*
152  * The following structure represents a relation mapping.
153  */
154 typedef struct
155 {
156  const char *old_tablespace;
157  const char *new_tablespace;
162 
163  /*
164  * old/new relfilenodes might differ for pg_largeobject(_metadata) indexes
165  * due to VACUUM FULL or REINDEX. Other relfilenodes are preserved.
166  */
169  /* the rest are used only for logging and error reporting */
170  char *nspname; /* namespaces */
171  char *relname;
172 } FileNameMap;
173 
174 /*
175  * Structure to store database information
176  */
177 typedef struct
178 {
179  Oid db_oid; /* oid of the database */
180  char *db_name; /* database name */
181  char db_tablespace[MAXPGPATH]; /* database default tablespace
182  * path */
183  char *db_collate;
184  char *db_ctype;
186  RelInfoArr rel_arr; /* array of all user relinfos */
187 } DbInfo;
188 
189 typedef struct
190 {
191  DbInfo *dbs; /* array of db infos */
192  int ndbs; /* number of db infos */
193 } DbInfoArr;
194 
195 /*
196  * The following structure is used to hold pg_control information.
197  * Rather than using the backend's control structure we use our own
198  * structure to avoid pg_control version issues between releases.
199  */
200 typedef struct
201 {
204  char nextxlogfile[25];
224 } ControlData;
225 
226 /*
227  * Enumeration to denote transfer modes
228  */
229 typedef enum
230 {
234 } transferMode;
235 
236 /*
237  * Enumeration to denote pg_log modes
238  */
239 typedef enum
240 {
246 } eLogType;
247 
248 
249 typedef long pgpid_t;
250 
251 
252 /*
253  * cluster
254  *
255  * information about each cluster
256  */
257 typedef struct
258 {
259  ControlData controldata; /* pg_control information */
260  DbInfoArr dbarr; /* dbinfos array */
261  char *pgdata; /* pathname for cluster's $PGDATA directory */
262  char *pgconfig; /* pathname for cluster's config file
263  * directory */
264  char *bindir; /* pathname for cluster's executable directory */
265  char *pgopts; /* options to pass to the server, like pg_ctl
266  * -o */
267  char *sockdir; /* directory for Unix Domain socket, if any */
268  unsigned short port; /* port number where postmaster is waiting */
269  uint32 major_version; /* PG_VERSION of cluster */
270  char major_version_str[64]; /* string PG_VERSION of cluster */
271  uint32 bin_version; /* version returned from pg_ctl */
272  const char *tablespace_suffix; /* directory specification */
273 } ClusterInfo;
274 
275 
276 /*
277  * LogOpts
278 */
279 typedef struct
280 {
281  FILE *internal; /* internal log FILE */
282  bool verbose; /* true -> be verbose in messages */
283  bool retain; /* retain log files on success */
284 } LogOpts;
285 
286 
287 /*
288  * UserOpts
289 */
290 typedef struct
291 {
292  bool check; /* true -> ask user for permission to make
293  * changes */
294  transferMode transfer_mode; /* copy files or link them? */
295  int jobs; /* number of processes/threads to use */
296  char *socketdir; /* directory to use for Unix sockets */
297 } UserOpts;
298 
299 typedef struct
300 {
301  char *name;
302  int dbnum;
303 } LibraryInfo;
304 
305 /*
306  * OSInfo
307  */
308 typedef struct
309 {
310  const char *progname; /* complete pathname for this program */
311  char *user; /* username for clusters */
312  bool user_specified; /* user specified on command-line */
313  char **old_tablespaces; /* tablespaces */
315  LibraryInfo *libraries; /* loadable libraries */
318 } OSInfo;
319 
320 
321 /*
322  * Global variables
323  */
324 extern LogOpts log_opts;
325 extern UserOpts user_opts;
326 extern ClusterInfo old_cluster,
327  new_cluster;
328 extern OSInfo os_info;
329 
330 
331 /* check.c */
332 
333 void output_check_banner(bool live_check);
334 void check_and_dump_old_cluster(bool live_check);
335 void check_new_cluster(void);
336 void report_clusters_compatible(void);
338 void output_completion_banner(char *deletion_script_file_name);
339 void check_cluster_versions(void);
340 void check_cluster_compatibility(bool live_check);
341 void create_script_for_old_cluster_deletion(char **deletion_script_file_name);
342 
343 
344 /* controldata.c */
345 
346 void get_control_data(ClusterInfo *cluster, bool live_check);
347 void check_control_data(ControlData *oldctrl, ControlData *newctrl);
348 void disable_old_cluster(void);
349 
350 
351 /* dump.c */
352 
353 void generate_old_dump(void);
354 
355 
356 /* exec.c */
357 
358 #define EXEC_PSQL_ARGS "--echo-queries --set ON_ERROR_STOP=on --no-psqlrc --dbname=template1"
359 
360 bool exec_prog(const char *log_file, const char *opt_log_file,
361  bool report_error, bool exit_on_error, const char *fmt,...) pg_attribute_printf(5, 6);
362 void verify_directories(void);
363 bool pid_lock_file_exists(const char *datadir);
364 
365 
366 /* file.c */
367 
368 void cloneFile(const char *src, const char *dst,
369  const char *schemaName, const char *relName);
370 void copyFile(const char *src, const char *dst,
371  const char *schemaName, const char *relName);
372 void linkFile(const char *src, const char *dst,
373  const char *schemaName, const char *relName);
374 void rewriteVisibilityMap(const char *fromfile, const char *tofile,
375  const char *schemaName, const char *relName);
376 void check_file_clone(void);
377 void check_hard_link(void);
378 
379 /* fopen_priv() is no longer different from fopen() */
380 #define fopen_priv(path, mode) fopen(path, mode)
381 
382 /* function.c */
383 
384 void get_loadable_libraries(void);
385 void check_loadable_libraries(void);
386 
387 /* info.c */
388 
390  DbInfo *new_db, int *nmaps, const char *old_pgdata,
391  const char *new_pgdata);
393 void print_maps(FileNameMap *maps, int n,
394  const char *db_name);
395 
396 /* option.c */
397 
398 void parseCommandLine(int argc, char *argv[]);
400 void get_sock_dir(ClusterInfo *cluster, bool live_check);
401 
402 /* relfilenode.c */
403 
404 void transfer_all_new_tablespaces(DbInfoArr *old_db_arr,
405  DbInfoArr *new_db_arr, char *old_pgdata, char *new_pgdata);
406 void transfer_all_new_dbs(DbInfoArr *old_db_arr,
407  DbInfoArr *new_db_arr, char *old_pgdata, char *new_pgdata,
408  char *old_tablespace);
409 
410 /* tablespace.c */
411 
412 void init_tablespaces(void);
413 
414 
415 /* server.c */
416 
417 PGconn *connectToServer(ClusterInfo *cluster, const char *db_name);
418 PGresult *executeQueryOrDie(PGconn *conn, const char *fmt,...) pg_attribute_printf(2, 3);
419 
421 
422 bool start_postmaster(ClusterInfo *cluster, bool report_and_exit_on_error);
423 void stop_postmaster(bool in_atexit);
425 void check_pghost_envvar(void);
426 
427 
428 /* util.c */
429 
430 char *quote_identifier(const char *s);
431 int get_user_info(char **user_name_p);
432 void check_ok(void);
433 void report_status(eLogType type, const char *fmt,...) pg_attribute_printf(2, 3);
434 void pg_log(eLogType type, const char *fmt,...) pg_attribute_printf(2, 3);
435 void pg_fatal(const char *fmt,...) pg_attribute_printf(1, 2) pg_attribute_noreturn();
436 void end_progress_output(void);
437 void prep_status(const char *fmt,...) pg_attribute_printf(1, 2);
438 void check_ok(void);
439 unsigned int str2uint(const char *str);
440 
441 
442 /* version.c */
443 
445  const char *base_query,
446  const char *output_path);
448  const char *type_name,
449  const char *output_path);
451  bool check_mode);
455  bool check_mode);
456 
459 
460 /* parallel.c */
461 void parallel_exec_prog(const char *log_file, const char *opt_log_file,
462  const char *fmt,...) pg_attribute_printf(3, 4);
463 void parallel_transfer_all_new_dbs(DbInfoArr *old_db_arr, DbInfoArr *new_db_arr,
464  char *old_pgdata, char *new_pgdata,
465  char *old_tablespace);
466 bool reap_child(bool wait_for_child);
void copyFile(const char *src, const char *dst, const char *schemaName, const char *relName)
Definition: file.c:78
uint32 get_major_server_version(ClusterInfo *cluster)
Definition: server.c:158
bool date_is_int
Definition: pg_upgrade.h:221
char * name
Definition: pg_upgrade.h:301
void transfer_all_new_tablespaces(DbInfoArr *old_db_arr, DbInfoArr *new_db_arr, char *old_pgdata, char *new_pgdata)
Definition: relfilenode.c:29
Oid old_relfilenode
Definition: pg_upgrade.h:167
void check_file_clone(void)
Definition: file.c:317
void report_clusters_compatible(void)
Definition: check.c:209
uint32 major_version
Definition: pg_upgrade.h:269
bool void verify_directories(void)
Definition: exec.c:251
unsigned int str2uint(const char *str)
Definition: util.c:240
void transfer_all_new_dbs(DbInfoArr *old_db_arr, DbInfoArr *new_db_arr, char *old_pgdata, char *new_pgdata, char *old_tablespace)
Definition: relfilenode.c:86
ClusterInfo old_cluster
Definition: pg_upgrade.c:59
void cluster(ParseState *pstate, ClusterStmt *stmt, bool isTopLevel)
Definition: cluster.c:103
void check_new_cluster(void)
Definition: check.c:179
bool check_for_data_types_usage(ClusterInfo *cluster, const char *base_query, const char *output_path)
Definition: version.c:113
ControlData controldata
Definition: pg_upgrade.h:259
long pgpid_t
Definition: pg_upgrade.h:249
bool start_postmaster(ClusterInfo *cluster, bool report_and_exit_on_error)
Definition: server.c:197
uint32 chkpnt_nxtoid
Definition: pg_upgrade.h:207
static char * log_file
Definition: pg_ctl.c:91
int num_libraries
Definition: pg_upgrade.h:316
int get_user_info(char **user_name_p)
Definition: util.c:211
uint32 walsz
Definition: pg_upgrade.h:215
void rewriteVisibilityMap(const char *fromfile, const char *tofile, const char *schemaName, const char *relName)
Definition: file.c:173
void check_cluster_compatibility(bool live_check)
Definition: check.c:327
PGresult * executeQueryOrDie(PGconn *conn, const char *fmt,...) pg_attribute_printf(2
void end_progress_output(void)
Definition: util.c:43
char * relname
Definition: pg_upgrade.h:135
void old_9_6_invalidate_hash_indexes(ClusterInfo *cluster, bool check_mode)
Definition: version.c:334
unsigned short port
Definition: pg_upgrade.h:268
void void void pg_fatal(const char *fmt,...) pg_attribute_printf(1
bool tblsp_alloc
Definition: pg_upgrade.h:142
PGresult char * cluster_conn_opts(ClusterInfo *cluster)
Definition: server.c:91
uint32 index
Definition: pg_upgrade.h:218
LogOpts log_opts
Definition: util.c:17
Oid new_db_oid
Definition: pg_upgrade.h:161
Oid reloid
Definition: pg_upgrade.h:136
unsigned int Oid
Definition: postgres_ext.h:31
void generate_old_dump(void)
Definition: dump.c:16
int jobs
Definition: pg_upgrade.h:295
char * nspname
Definition: pg_upgrade.h:134
Oid db_oid
Definition: pg_upgrade.h:179
bool user_specified
Definition: pg_upgrade.h:312
#define pg_attribute_printf(f, a)
Definition: c.h:164
char * pgopts
Definition: pg_upgrade.h:265
uint32 chkpnt_nxtmxoff
Definition: pg_upgrade.h:209
void check_pghost_envvar(void)
Definition: server.c:357
void check_loadable_libraries(void)
Definition: function.c:180
char * db_ctype
Definition: pg_upgrade.h:184
uint32 blocksz
Definition: pg_upgrade.h:213
uint32 chkpnt_nxtxid
Definition: pg_upgrade.h:205
void get_control_data(ClusterInfo *cluster, bool live_check)
Definition: controldata.c:34
char * pgconfig
Definition: pg_upgrade.h:262
const char * old_tablespace
Definition: pg_upgrade.h:156
void print_maps(FileNameMap *maps, int n, const char *db_name)
Definition: info.c:283
Oid new_relfilenode
Definition: pg_upgrade.h:168
PGconn * conn
Definition: streamutil.c:54
uint32 chkpnt_nxtepoch
Definition: pg_upgrade.h:206
#define MAXPGPATH
RelInfo * rels
Definition: pg_upgrade.h:147
Oid relfilenode
Definition: pg_upgrade.h:137
bool reap_child(bool wait_for_child)
Definition: parallel.c:284
uint32 chkpnt_oldstxid
Definition: pg_upgrade.h:211
void disable_old_cluster(void)
Definition: controldata.c:705
bool data_checksum_version
Definition: pg_upgrade.h:223
ClusterInfo new_cluster
Definition: pg_upgrade.c:59
void create_script_for_old_cluster_deletion(char **deletion_script_file_name)
Definition: check.c:518
void void void pg_attribute_noreturn()
void prep_status(const char *fmt,...) pg_attribute_printf(1
void new_9_0_populate_pg_largeobject_metadata(ClusterInfo *cluster, bool check_mode)
Definition: version.c:22
uint32 ident
Definition: pg_upgrade.h:217
void check_control_data(ControlData *oldctrl, ControlData *newctrl)
Definition: controldata.c:648
char * datadir
char * output_files[]
Definition: pg_upgrade.c:63
unsigned int uint32
Definition: c.h:441
LibraryInfo * libraries
Definition: pg_upgrade.h:315
uint32 align
Definition: pg_upgrade.h:212
void check_ok(void)
Definition: util.c:171
PGconn * connectToServer(ClusterInfo *cluster, const char *db_name)
Definition: server.c:27
const char * old_tablespace_suffix
Definition: pg_upgrade.h:158
void report_extension_updates(ClusterInfo *cluster)
Definition: version.c:478
bool check_for_data_type_usage(ClusterInfo *cluster, const char *type_name, const char *output_path)
Definition: version.c:241
transferMode transfer_mode
Definition: pg_upgrade.h:294
uint32 chkpnt_oldstMulti
Definition: pg_upgrade.h:210
uint32 walseg
Definition: pg_upgrade.h:216
Oid indtable
Definition: pg_upgrade.h:138
bool verbose
Definition: pg_upgrade.h:282
char * bindir
Definition: pg_upgrade.h:264
void linkFile(const char *src, const char *dst, const char *schemaName, const char *relName)
Definition: file.c:147
void void parallel_transfer_all_new_dbs(DbInfoArr *old_db_arr, DbInfoArr *new_db_arr, char *old_pgdata, char *new_pgdata, char *old_tablespace)
Definition: parallel.c:175
void check_cluster_versions(void)
Definition: check.c:285
uint32 cat_ver
Definition: pg_upgrade.h:203
char ** old_tablespaces
Definition: pg_upgrade.h:313
uint32 chkpnt_nxtmulti
Definition: pg_upgrade.h:208
transferMode
Definition: pg_upgrade.h:229
void stop_postmaster(bool in_atexit)
Definition: server.c:330
uint32 largesz
Definition: pg_upgrade.h:214
void get_sock_dir(ClusterInfo *cluster, bool live_check)
Definition: option.c:469
const char * tablespace_suffix
Definition: pg_upgrade.h:272
void check_hard_link(void)
Definition: file.c:359
uint32 bin_version
Definition: pg_upgrade.h:271
DbInfoArr dbarr
Definition: pg_upgrade.h:260
void void pg_log(eLogType type, const char *fmt,...) pg_attribute_printf(2
void output_check_banner(bool live_check)
Definition: check.c:65
FileNameMap * gen_db_file_maps(DbInfo *old_db, DbInfo *new_db, int *nmaps, const char *old_pgdata, const char *new_pgdata)
Definition: info.c:39
Oid old_db_oid
Definition: pg_upgrade.h:160
const char * progname
Definition: pg_upgrade.h:310
uint32 toast
Definition: pg_upgrade.h:219
RelInfoArr rel_arr
Definition: pg_upgrade.h:186
bool pid_lock_file_exists(const char *datadir)
Definition: exec.c:220
OSInfo os_info
Definition: pg_upgrade.c:61
static const pg_conv_map maps[]
void get_loadable_libraries(void)
Definition: function.c:53
void parallel_exec_prog(const char *log_file, const char *opt_log_file, const char *fmt,...) pg_attribute_printf(3
uint32 large_object
Definition: pg_upgrade.h:220
bool check
Definition: pg_upgrade.h:292
char * quote_identifier(const char *s)
Definition: ruleutils.c:11374
char * nspname
Definition: pg_upgrade.h:170
int db_encoding
Definition: pg_upgrade.h:185
uint32 ctrl_ver
Definition: pg_upgrade.h:202
ClusterInfo * running_cluster
Definition: pg_upgrade.h:317
void get_db_and_rel_infos(ClusterInfo *cluster)
Definition: info.c:309
void adjust_data_dir(ClusterInfo *cluster)
Definition: option.c:404
void init_tablespaces(void)
Definition: tablespace.c:19
char * pgdata
Definition: pg_upgrade.h:261
char * sockdir
Definition: pg_upgrade.h:267
UserOpts user_opts
Definition: option.c:30
int num_old_tablespaces
Definition: pg_upgrade.h:314
bool exec_prog(const char *log_file, const char *opt_log_file, bool report_error, bool exit_on_error, const char *fmt,...) pg_attribute_printf(5
void report_status(eLogType type, const char *fmt,...) pg_attribute_printf(2
char * tablespace
Definition: pg_upgrade.h:140
char * db_name
Definition: pg_upgrade.h:180
bool nsp_alloc
Definition: pg_upgrade.h:141
void old_9_3_check_for_line_data_type_usage(ClusterInfo *cluster)
Definition: version.c:268
void parseCommandLine(int argc, char *argv[])
Definition: option.c:39
char * db_collate
Definition: pg_upgrade.h:183
void issue_warnings_and_set_wal_level(void)
Definition: check.c:226
DbInfo * dbs
Definition: pg_upgrade.h:191
eLogType
Definition: pg_upgrade.h:239
void cloneFile(const char *src, const char *dst, const char *schemaName, const char *relName)
Definition: file.c:38
bool retain
Definition: pg_upgrade.h:283
char * user
Definition: pg_upgrade.h:311
const char * new_tablespace
Definition: pg_upgrade.h:157
char * socketdir
Definition: pg_upgrade.h:296
void output_completion_banner(char *deletion_script_file_name)
Definition: check.c:251
bool float8_pass_by_value
Definition: pg_upgrade.h:222
const char * new_tablespace_suffix
Definition: pg_upgrade.h:159
char * relname
Definition: pg_upgrade.h:171
Oid toastheap
Definition: pg_upgrade.h:139
void check_and_dump_old_cluster(bool live_check)
Definition: check.c:83
void old_11_check_for_sql_identifier_data_type_usage(ClusterInfo *cluster)
Definition: version.c:449
void old_9_6_check_for_unknown_data_type_usage(ClusterInfo *cluster)
Definition: version.c:306