mirror of
https://github.com/postgres/postgres.git
synced 2025-05-09 18:21:05 +03:00
Fix 9637badd9f.
Discussion: https://postgr.es/m/0a364430-266e-1e1a-d5d8-1a5273c9ddb6@dunslane.net Reported-by: Andrew Dunstan
This commit is contained in:
parent
9637badd9f
commit
206b44bb24
src/bin/pg_upgrade
@ -311,11 +311,19 @@ get_template0_info(ClusterInfo *cluster)
|
||||
int i_datctype;
|
||||
int i_daticulocale;
|
||||
|
||||
dbres = executeQueryOrDie(conn,
|
||||
"SELECT encoding, datlocprovider, "
|
||||
" datcollate, datctype, daticulocale "
|
||||
"FROM pg_catalog.pg_database "
|
||||
"WHERE datname='template0'");
|
||||
if (GET_MAJOR_VERSION(cluster->major_version) >= 1500)
|
||||
dbres = executeQueryOrDie(conn,
|
||||
"SELECT encoding, datlocprovider, "
|
||||
" datcollate, datctype, daticulocale "
|
||||
"FROM pg_catalog.pg_database "
|
||||
"WHERE datname='template0'");
|
||||
else
|
||||
dbres = executeQueryOrDie(conn,
|
||||
"SELECT encoding, 'c' AS datlocprovider, "
|
||||
" datcollate, datctype, NULL AS daticulocale "
|
||||
"FROM pg_catalog.pg_database "
|
||||
"WHERE datname='template0'");
|
||||
|
||||
|
||||
if (PQntuples(dbres) != 1)
|
||||
pg_fatal("template0 not found");
|
||||
|
@ -404,19 +404,30 @@ set_locale_and_encoding(void)
|
||||
daticulocale_literal = pg_strdup("NULL");
|
||||
|
||||
/* update template0 in new cluster */
|
||||
PQclear(executeQueryOrDie(conn_new_template1,
|
||||
"UPDATE pg_catalog.pg_database "
|
||||
" SET encoding = %u, "
|
||||
" datlocprovider = '%c', "
|
||||
" datcollate = %s, "
|
||||
" datctype = %s, "
|
||||
" daticulocale = %s "
|
||||
" WHERE datname = 'template0' ",
|
||||
locale->db_encoding,
|
||||
locale->db_collprovider,
|
||||
datcollate_literal,
|
||||
datctype_literal,
|
||||
daticulocale_literal));
|
||||
if (GET_MAJOR_VERSION(new_cluster.major_version) >= 1500)
|
||||
PQclear(executeQueryOrDie(conn_new_template1,
|
||||
"UPDATE pg_catalog.pg_database "
|
||||
" SET encoding = %u, "
|
||||
" datlocprovider = '%c', "
|
||||
" datcollate = %s, "
|
||||
" datctype = %s, "
|
||||
" daticulocale = %s "
|
||||
" WHERE datname = 'template0' ",
|
||||
locale->db_encoding,
|
||||
locale->db_collprovider,
|
||||
datcollate_literal,
|
||||
datctype_literal,
|
||||
daticulocale_literal));
|
||||
else
|
||||
PQclear(executeQueryOrDie(conn_new_template1,
|
||||
"UPDATE pg_catalog.pg_database "
|
||||
" SET encoding = %u, "
|
||||
" datcollate = %s, "
|
||||
" datctype = %s "
|
||||
" WHERE datname = 'template0' ",
|
||||
locale->db_encoding,
|
||||
datcollate_literal,
|
||||
datctype_literal));
|
||||
|
||||
PQfreemem(datcollate_literal);
|
||||
PQfreemem(datctype_literal);
|
||||
|
@ -110,8 +110,12 @@ my $original_encoding = "6"; # UTF-8
|
||||
my $original_provider = "c";
|
||||
my $original_collate = "C";
|
||||
my $original_iculocale = "";
|
||||
my $provider_field = "'c' AS datlocprovider";
|
||||
my $iculocale_field = "NULL AS daticulocale";
|
||||
if ($oldnode->pg_version >= 15 && $ENV{with_icu} eq 'yes')
|
||||
{
|
||||
$provider_field = "datlocprovider";
|
||||
$iculocale_field = "daticulocale";
|
||||
$original_provider = "i";
|
||||
$original_iculocale = "fr-CA";
|
||||
}
|
||||
@ -132,8 +136,8 @@ $oldnode->start;
|
||||
|
||||
my $result;
|
||||
$result = $oldnode->safe_psql(
|
||||
'postgres', q{SELECT encoding, datlocprovider, datcollate, daticulocale
|
||||
FROM pg_database WHERE datname='template0'});
|
||||
'postgres', "SELECT encoding, $provider_field, datcollate, $iculocale_field
|
||||
FROM pg_database WHERE datname='template0'");
|
||||
is($result, "$original_encoding|$original_provider|$original_collate|$original_iculocale",
|
||||
"check locales in original cluster"
|
||||
);
|
||||
@ -395,8 +399,8 @@ if (-d $log_path)
|
||||
|
||||
# Test that upgraded cluster has original locale settings.
|
||||
$result = $newnode->safe_psql(
|
||||
'postgres', q{SELECT encoding, datlocprovider, datcollate, datctype, daticulocale
|
||||
FROM pg_database WHERE datname='template0'});
|
||||
'postgres', "SELECT encoding, $provider_field, datcollate, datctype, $iculocale_field
|
||||
FROM pg_database WHERE datname='template0'");
|
||||
is($result, "$original_encoding|$original_provider|$original_collate|$original_ctype|$original_iculocale",
|
||||
"check that locales in new cluster match original cluster"
|
||||
);
|
||||
|
Loading…
x
Reference in New Issue
Block a user