@ -16,6 +16,7 @@ static void check_old_cluster_has_new_cluster_dbs(void);
static void check_locale_and_encoding ( ControlData * oldctrl ,
ControlData * newctrl ) ;
static void check_is_super_user ( ClusterInfo * cluster ) ;
static void check_proper_datallowconn ( ClusterInfo * cluster ) ;
static void check_for_prepared_transactions ( ClusterInfo * cluster ) ;
static void check_for_isn_and_int8_passing_mismatch ( ClusterInfo * cluster ) ;
static void check_for_reg_data_type_usage ( ClusterInfo * cluster ) ;
@ -97,6 +98,7 @@ check_old_cluster(bool live_check,
* Check for various failure cases
*/
check_is_super_user ( & old_cluster ) ;
check_proper_datallowconn ( & old_cluster ) ;
check_for_prepared_transactions ( & old_cluster ) ;
check_for_reg_data_type_usage ( & old_cluster ) ;
check_for_isn_and_int8_passing_mismatch ( & old_cluster ) ;
@ -580,6 +582,58 @@ check_is_super_user(ClusterInfo *cluster)
}
static void
check_proper_datallowconn ( ClusterInfo * cluster )
{
int dbnum ;
PGconn * conn_template1 ;
PGresult * dbres ;
int ntups ;
int i_datname ;
int i_datallowconn ;
prep_status ( " Checking database connection settings " ) ;
conn_template1 = connectToServer ( cluster , " template1 " ) ;
/* get database names */
dbres = executeQueryOrDie ( conn_template1 ,
" SELECT datname, datallowconn "
" FROM pg_catalog.pg_database " ) ;
i_datname = PQfnumber ( dbres , " datname " ) ;
i_datallowconn = PQfnumber ( dbres , " datallowconn " ) ;
ntups = PQntuples ( dbres ) ;
for ( dbnum = 0 ; dbnum < ntups ; dbnum + + )
{
char * datname = PQgetvalue ( dbres , dbnum , i_datname ) ;
char * datallowconn = PQgetvalue ( dbres , dbnum , i_datallowconn ) ;
if ( strcmp ( datname , " template0 " ) = = 0 )
{
/* avoid restore failure when pg_dumpall tries to create template0 */
if ( strcmp ( datallowconn , " t " ) = = 0 )
pg_log ( PG_FATAL , " template0 must not allow connections, "
" i.e. its pg_database.datallowconn must be false \n " ) ;
}
else
{
/* avoid datallowconn == false databases from being skipped on restore */
if ( strcmp ( datallowconn , " f " ) = = 0 )
pg_log ( PG_FATAL , " All non-template0 databases must allow connections, "
" i.e. their pg_database.datallowconn must be true \n " ) ;
}
}
PQclear ( dbres ) ;
PQfinish ( conn_template1 ) ;
check_ok ( ) ;
}
/*
* check_for_prepared_transactions ( )
*