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");
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);
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";
}
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"
);
# 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"
);