mirror of
https://github.com/postgres/postgres.git
synced 2025-05-11 05:41:32 +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
@ -311,11 +311,19 @@ get_template0_info(ClusterInfo *cluster)
|
|||||||
int i_datctype;
|
int i_datctype;
|
||||||
int i_daticulocale;
|
int i_daticulocale;
|
||||||
|
|
||||||
dbres = executeQueryOrDie(conn,
|
if (GET_MAJOR_VERSION(cluster->major_version) >= 1500)
|
||||||
"SELECT encoding, datlocprovider, "
|
dbres = executeQueryOrDie(conn,
|
||||||
" datcollate, datctype, daticulocale "
|
"SELECT encoding, datlocprovider, "
|
||||||
"FROM pg_catalog.pg_database "
|
" datcollate, datctype, daticulocale "
|
||||||
"WHERE datname='template0'");
|
"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)
|
if (PQntuples(dbres) != 1)
|
||||||
pg_fatal("template0 not found");
|
pg_fatal("template0 not found");
|
||||||
|
@ -404,19 +404,30 @@ set_locale_and_encoding(void)
|
|||||||
daticulocale_literal = pg_strdup("NULL");
|
daticulocale_literal = pg_strdup("NULL");
|
||||||
|
|
||||||
/* update template0 in new cluster */
|
/* update template0 in new cluster */
|
||||||
PQclear(executeQueryOrDie(conn_new_template1,
|
if (GET_MAJOR_VERSION(new_cluster.major_version) >= 1500)
|
||||||
"UPDATE pg_catalog.pg_database "
|
PQclear(executeQueryOrDie(conn_new_template1,
|
||||||
" SET encoding = %u, "
|
"UPDATE pg_catalog.pg_database "
|
||||||
" datlocprovider = '%c', "
|
" SET encoding = %u, "
|
||||||
" datcollate = %s, "
|
" datlocprovider = '%c', "
|
||||||
" datctype = %s, "
|
" datcollate = %s, "
|
||||||
" daticulocale = %s "
|
" datctype = %s, "
|
||||||
" WHERE datname = 'template0' ",
|
" daticulocale = %s "
|
||||||
locale->db_encoding,
|
" WHERE datname = 'template0' ",
|
||||||
locale->db_collprovider,
|
locale->db_encoding,
|
||||||
datcollate_literal,
|
locale->db_collprovider,
|
||||||
datctype_literal,
|
datcollate_literal,
|
||||||
daticulocale_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(datcollate_literal);
|
||||||
PQfreemem(datctype_literal);
|
PQfreemem(datctype_literal);
|
||||||
|
@ -110,8 +110,12 @@ my $original_encoding = "6"; # UTF-8
|
|||||||
my $original_provider = "c";
|
my $original_provider = "c";
|
||||||
my $original_collate = "C";
|
my $original_collate = "C";
|
||||||
my $original_iculocale = "";
|
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')
|
if ($oldnode->pg_version >= 15 && $ENV{with_icu} eq 'yes')
|
||||||
{
|
{
|
||||||
|
$provider_field = "datlocprovider";
|
||||||
|
$iculocale_field = "daticulocale";
|
||||||
$original_provider = "i";
|
$original_provider = "i";
|
||||||
$original_iculocale = "fr-CA";
|
$original_iculocale = "fr-CA";
|
||||||
}
|
}
|
||||||
@ -132,8 +136,8 @@ $oldnode->start;
|
|||||||
|
|
||||||
my $result;
|
my $result;
|
||||||
$result = $oldnode->safe_psql(
|
$result = $oldnode->safe_psql(
|
||||||
'postgres', q{SELECT encoding, datlocprovider, datcollate, daticulocale
|
'postgres', "SELECT encoding, $provider_field, datcollate, $iculocale_field
|
||||||
FROM pg_database WHERE datname='template0'});
|
FROM pg_database WHERE datname='template0'");
|
||||||
is($result, "$original_encoding|$original_provider|$original_collate|$original_iculocale",
|
is($result, "$original_encoding|$original_provider|$original_collate|$original_iculocale",
|
||||||
"check locales in original cluster"
|
"check locales in original cluster"
|
||||||
);
|
);
|
||||||
@ -395,8 +399,8 @@ if (-d $log_path)
|
|||||||
|
|
||||||
# Test that upgraded cluster has original locale settings.
|
# Test that upgraded cluster has original locale settings.
|
||||||
$result = $newnode->safe_psql(
|
$result = $newnode->safe_psql(
|
||||||
'postgres', q{SELECT encoding, datlocprovider, datcollate, datctype, daticulocale
|
'postgres', "SELECT encoding, $provider_field, datcollate, datctype, $iculocale_field
|
||||||
FROM pg_database WHERE datname='template0'});
|
FROM pg_database WHERE datname='template0'");
|
||||||
is($result, "$original_encoding|$original_provider|$original_collate|$original_ctype|$original_iculocale",
|
is($result, "$original_encoding|$original_provider|$original_collate|$original_ctype|$original_iculocale",
|
||||||
"check that locales in new cluster match original cluster"
|
"check that locales in new cluster match original cluster"
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user