mirror of https://github.com/citusdata/citus.git
PG17 compatibility: add COLLPROVIDER_BUILTIN option and fix tests (#7752)
In PG17 adds builtin C.UTF-8 locale option, we add it in the code to avoid "unknown collation provider" in vanilla tests. Relevant PG commit:pull/7922/headf69319f2f1
f69319f2f1fb16eda4b535bcccec90dff3a6795e Also in PG17, colliculocale, daticulocale renamed to colllocale, datlocale Here we fix the following tests to avoid alternative output pg15 pg16 multi_mx_create_table multi_schema_support Relevant PG commit:f696c0cd5f
f696c0cd5f299f1b51e214efc55a22a782cc175d
parent
9a413e0c32
commit
51c2e63c30
|
@ -132,6 +132,7 @@ CreateCollationDDLInternal(Oid collationId, Oid *collowner, char **quotedCollati
|
||||||
char *schemaName = get_namespace_name(collnamespace);
|
char *schemaName = get_namespace_name(collnamespace);
|
||||||
*quotedCollationName = quote_qualified_identifier(schemaName, collname);
|
*quotedCollationName = quote_qualified_identifier(schemaName, collname);
|
||||||
const char *providerString =
|
const char *providerString =
|
||||||
|
collprovider == COLLPROVIDER_BUILTIN ? "builtin" :
|
||||||
collprovider == COLLPROVIDER_DEFAULT ? "default" :
|
collprovider == COLLPROVIDER_DEFAULT ? "default" :
|
||||||
collprovider == COLLPROVIDER_ICU ? "icu" :
|
collprovider == COLLPROVIDER_ICU ? "icu" :
|
||||||
collprovider == COLLPROVIDER_LIBC ? "libc" : NULL;
|
collprovider == COLLPROVIDER_LIBC ? "libc" : NULL;
|
||||||
|
|
|
@ -144,6 +144,8 @@ getStxstattarget_compat(HeapTuple tup)
|
||||||
#define getProcNo_compat(a) (a->pgprocno)
|
#define getProcNo_compat(a) (a->pgprocno)
|
||||||
#define getLxid_compat(a) (a->lxid)
|
#define getLxid_compat(a) (a->lxid)
|
||||||
|
|
||||||
|
#define COLLPROVIDER_BUILTIN 'b'
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if PG_VERSION_NUM >= PG_VERSION_16
|
#if PG_VERSION_NUM >= PG_VERSION_16
|
||||||
|
|
|
@ -60,7 +60,14 @@ SET search_path TO public;
|
||||||
SHOW server_version \gset
|
SHOW server_version \gset
|
||||||
SELECT substring(:'server_version', '\d+')::int >= 16 AS server_version_ge_16
|
SELECT substring(:'server_version', '\d+')::int >= 16 AS server_version_ge_16
|
||||||
\gset
|
\gset
|
||||||
\if :server_version_ge_16
|
SELECT substring(:'server_version', '\d+')::int >= 17 AS server_version_ge_17
|
||||||
|
\gset
|
||||||
|
\if :server_version_ge_17
|
||||||
|
-- PG17 renamed colliculocale to colllocale
|
||||||
|
-- Relevant PG commit:
|
||||||
|
-- https://github.com/postgres/postgres/commit/f696c0cd5f299f1b51e214efc55a22a782cc175d
|
||||||
|
SELECT quote_ident((SELECT CASE WHEN datlocprovider='i' THEN datlocale ELSE datcollate END FROM pg_database WHERE datname = current_database())) as current_locale \gset
|
||||||
|
\elif :server_version_ge_16
|
||||||
-- In PG16, read-only server settings lc_collate and lc_ctype are removed
|
-- In PG16, read-only server settings lc_collate and lc_ctype are removed
|
||||||
-- Relevant PG commit: b0f6c437160db640d4ea3e49398ebc3ba39d1982
|
-- Relevant PG commit: b0f6c437160db640d4ea3e49398ebc3ba39d1982
|
||||||
SELECT quote_ident((SELECT CASE WHEN datlocprovider='i' THEN daticulocale ELSE datcollate END FROM pg_database WHERE datname = current_database())) as current_locale \gset
|
SELECT quote_ident((SELECT CASE WHEN datlocprovider='i' THEN daticulocale ELSE datcollate END FROM pg_database WHERE datname = current_database())) as current_locale \gset
|
||||||
|
|
|
@ -350,7 +350,14 @@ SET search_path TO public;
|
||||||
SHOW server_version \gset
|
SHOW server_version \gset
|
||||||
SELECT substring(:'server_version', '\d+')::int >= 16 AS server_version_ge_16
|
SELECT substring(:'server_version', '\d+')::int >= 16 AS server_version_ge_16
|
||||||
\gset
|
\gset
|
||||||
\if :server_version_ge_16
|
SELECT substring(:'server_version', '\d+')::int >= 17 AS server_version_ge_17
|
||||||
|
\gset
|
||||||
|
\if :server_version_ge_17
|
||||||
|
-- PG17 renamed colliculocale to colllocale
|
||||||
|
-- Relevant PG commit:
|
||||||
|
-- https://github.com/postgres/postgres/commit/f696c0cd5f299f1b51e214efc55a22a782cc175d
|
||||||
|
SELECT quote_ident((SELECT CASE WHEN datlocprovider='i' THEN datlocale ELSE datcollate END FROM pg_database WHERE datname = current_database())) as current_locale \gset
|
||||||
|
\elif :server_version_ge_16
|
||||||
-- In PG16, read-only server settings lc_collate and lc_ctype are removed
|
-- In PG16, read-only server settings lc_collate and lc_ctype are removed
|
||||||
-- Relevant PG commit: b0f6c437160db640d4ea3e49398ebc3ba39d1982
|
-- Relevant PG commit: b0f6c437160db640d4ea3e49398ebc3ba39d1982
|
||||||
SELECT quote_ident((SELECT CASE WHEN datlocprovider='i' THEN daticulocale ELSE datcollate END FROM pg_database WHERE datname = current_database())) as current_locale \gset
|
SELECT quote_ident((SELECT CASE WHEN datlocprovider='i' THEN daticulocale ELSE datcollate END FROM pg_database WHERE datname = current_database())) as current_locale \gset
|
||||||
|
|
|
@ -51,9 +51,32 @@ SELECT result FROM run_command_on_all_nodes('
|
||||||
|
|
||||||
(3 rows)
|
(3 rows)
|
||||||
|
|
||||||
SELECT result FROM run_command_on_all_nodes('
|
-- PG17 renamed colliculocale to colllocale
|
||||||
SELECT colliculocale FROM pg_collation WHERE collname = ''german_phonebook_test'';
|
-- Relevant PG commit:
|
||||||
');
|
-- https://github.com/postgres/postgres/commit/f696c0cd5f299f1b51e214efc55a22a782cc175d
|
||||||
|
SHOW server_version \gset
|
||||||
|
SELECT substring(:'server_version', '\d+')::int >= 17 AS server_version_ge_17
|
||||||
|
\gset
|
||||||
|
\if :server_version_ge_17
|
||||||
|
SELECT '$$' ||
|
||||||
|
'SELECT colllocale FROM pg_collation WHERE collname = ''german_phonebook_test'';'
|
||||||
|
|| '$$'
|
||||||
|
AS worker_query_1 \gset
|
||||||
|
SELECT '$$' ||
|
||||||
|
'SELECT colllocale FROM pg_collation WHERE collname = ''default_provider'';'
|
||||||
|
|| '$$'
|
||||||
|
AS worker_query_2 \gset
|
||||||
|
\else
|
||||||
|
SELECT '$$' ||
|
||||||
|
'SELECT colliculocale FROM pg_collation WHERE collname = ''german_phonebook_test'';'
|
||||||
|
|| '$$'
|
||||||
|
AS worker_query_1 \gset
|
||||||
|
SELECT '$$' ||
|
||||||
|
'SELECT colliculocale FROM pg_collation WHERE collname = ''default_provider'';'
|
||||||
|
|| '$$'
|
||||||
|
AS worker_query_2 \gset
|
||||||
|
\endif
|
||||||
|
SELECT result FROM run_command_on_all_nodes(:worker_query_1);
|
||||||
result
|
result
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
de-u-co-phonebk
|
de-u-co-phonebk
|
||||||
|
@ -83,9 +106,7 @@ SELECT result FROM run_command_on_all_nodes('
|
||||||
POSIX
|
POSIX
|
||||||
(3 rows)
|
(3 rows)
|
||||||
|
|
||||||
SELECT result FROM run_command_on_all_nodes('
|
SELECT result FROM run_command_on_all_nodes(:worker_query_2);
|
||||||
SELECT colliculocale FROM pg_collation WHERE collname = ''default_provider'';
|
|
||||||
');
|
|
||||||
result
|
result
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -310,14 +310,14 @@ SELECT create_distributed_table('test_collation_rules', 'a');
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
INSERT INTO test_collation_rules VALUES ('Abernathy'), ('apple'), ('bird'), ('Boston'), ('Graham'), ('green');
|
INSERT INTO test_collation_rules VALUES ('Abernathy'), ('apple'), ('bird'), ('Boston'), ('Graham'), ('green');
|
||||||
SELECT collname, collprovider, colliculocale, collicurules
|
SELECT collname, collprovider, collicurules
|
||||||
FROM pg_collation
|
FROM pg_collation
|
||||||
WHERE collname like '%_rule%'
|
WHERE collname like '%_rule%'
|
||||||
ORDER BY 1;
|
ORDER BY 1;
|
||||||
collname | collprovider | colliculocale | collicurules
|
collname | collprovider | collicurules
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
default_rule | i | und |
|
default_rule | i |
|
||||||
special_rule | i | und | &a < g
|
special_rule | i | &a < g
|
||||||
(2 rows)
|
(2 rows)
|
||||||
|
|
||||||
SELECT * FROM test_collation_rules ORDER BY a COLLATE default_rule;
|
SELECT * FROM test_collation_rules ORDER BY a COLLATE default_rule;
|
||||||
|
@ -344,14 +344,14 @@ SELECT * FROM test_collation_rules ORDER BY a COLLATE special_rule;
|
||||||
|
|
||||||
\c - - - :worker_1_port
|
\c - - - :worker_1_port
|
||||||
SET search_path TO pg16;
|
SET search_path TO pg16;
|
||||||
SELECT collname, collprovider, colliculocale, collicurules
|
SELECT collname, collprovider, collicurules
|
||||||
FROM pg_collation
|
FROM pg_collation
|
||||||
WHERE collname like '%_rule%'
|
WHERE collname like '%_rule%'
|
||||||
ORDER BY 1;
|
ORDER BY 1;
|
||||||
collname | collprovider | colliculocale | collicurules
|
collname | collprovider | collicurules
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
default_rule | i | und |
|
default_rule | i |
|
||||||
special_rule | i | und | &a < g
|
special_rule | i | &a < g
|
||||||
(2 rows)
|
(2 rows)
|
||||||
|
|
||||||
SELECT * FROM test_collation_rules ORDER BY a COLLATE default_rule;
|
SELECT * FROM test_collation_rules ORDER BY a COLLATE default_rule;
|
||||||
|
|
|
@ -61,8 +61,15 @@ SET search_path TO public;
|
||||||
SHOW server_version \gset
|
SHOW server_version \gset
|
||||||
SELECT substring(:'server_version', '\d+')::int >= 16 AS server_version_ge_16
|
SELECT substring(:'server_version', '\d+')::int >= 16 AS server_version_ge_16
|
||||||
\gset
|
\gset
|
||||||
|
SELECT substring(:'server_version', '\d+')::int >= 17 AS server_version_ge_17
|
||||||
|
\gset
|
||||||
|
|
||||||
\if :server_version_ge_16
|
\if :server_version_ge_17
|
||||||
|
-- PG17 renamed colliculocale to colllocale
|
||||||
|
-- Relevant PG commit:
|
||||||
|
-- https://github.com/postgres/postgres/commit/f696c0cd5f299f1b51e214efc55a22a782cc175d
|
||||||
|
SELECT quote_ident((SELECT CASE WHEN datlocprovider='i' THEN datlocale ELSE datcollate END FROM pg_database WHERE datname = current_database())) as current_locale \gset
|
||||||
|
\elif :server_version_ge_16
|
||||||
-- In PG16, read-only server settings lc_collate and lc_ctype are removed
|
-- In PG16, read-only server settings lc_collate and lc_ctype are removed
|
||||||
-- Relevant PG commit: b0f6c437160db640d4ea3e49398ebc3ba39d1982
|
-- Relevant PG commit: b0f6c437160db640d4ea3e49398ebc3ba39d1982
|
||||||
SELECT quote_ident((SELECT CASE WHEN datlocprovider='i' THEN daticulocale ELSE datcollate END FROM pg_database WHERE datname = current_database())) as current_locale \gset
|
SELECT quote_ident((SELECT CASE WHEN datlocprovider='i' THEN daticulocale ELSE datcollate END FROM pg_database WHERE datname = current_database())) as current_locale \gset
|
||||||
|
|
|
@ -297,8 +297,15 @@ SET search_path TO public;
|
||||||
SHOW server_version \gset
|
SHOW server_version \gset
|
||||||
SELECT substring(:'server_version', '\d+')::int >= 16 AS server_version_ge_16
|
SELECT substring(:'server_version', '\d+')::int >= 16 AS server_version_ge_16
|
||||||
\gset
|
\gset
|
||||||
|
SELECT substring(:'server_version', '\d+')::int >= 17 AS server_version_ge_17
|
||||||
|
\gset
|
||||||
|
|
||||||
\if :server_version_ge_16
|
\if :server_version_ge_17
|
||||||
|
-- PG17 renamed colliculocale to colllocale
|
||||||
|
-- Relevant PG commit:
|
||||||
|
-- https://github.com/postgres/postgres/commit/f696c0cd5f299f1b51e214efc55a22a782cc175d
|
||||||
|
SELECT quote_ident((SELECT CASE WHEN datlocprovider='i' THEN datlocale ELSE datcollate END FROM pg_database WHERE datname = current_database())) as current_locale \gset
|
||||||
|
\elif :server_version_ge_16
|
||||||
-- In PG16, read-only server settings lc_collate and lc_ctype are removed
|
-- In PG16, read-only server settings lc_collate and lc_ctype are removed
|
||||||
-- Relevant PG commit: b0f6c437160db640d4ea3e49398ebc3ba39d1982
|
-- Relevant PG commit: b0f6c437160db640d4ea3e49398ebc3ba39d1982
|
||||||
SELECT quote_ident((SELECT CASE WHEN datlocprovider='i' THEN daticulocale ELSE datcollate END FROM pg_database WHERE datname = current_database())) as current_locale \gset
|
SELECT quote_ident((SELECT CASE WHEN datlocprovider='i' THEN daticulocale ELSE datcollate END FROM pg_database WHERE datname = current_database())) as current_locale \gset
|
||||||
|
|
|
@ -41,9 +41,36 @@ SELECT result FROM run_command_on_all_nodes('
|
||||||
SELECT result FROM run_command_on_all_nodes('
|
SELECT result FROM run_command_on_all_nodes('
|
||||||
SELECT collctype FROM pg_collation WHERE collname = ''german_phonebook_test'';
|
SELECT collctype FROM pg_collation WHERE collname = ''german_phonebook_test'';
|
||||||
');
|
');
|
||||||
SELECT result FROM run_command_on_all_nodes('
|
|
||||||
SELECT colliculocale FROM pg_collation WHERE collname = ''german_phonebook_test'';
|
-- PG17 renamed colliculocale to colllocale
|
||||||
');
|
-- Relevant PG commit:
|
||||||
|
-- https://github.com/postgres/postgres/commit/f696c0cd5f299f1b51e214efc55a22a782cc175d
|
||||||
|
|
||||||
|
SHOW server_version \gset
|
||||||
|
SELECT substring(:'server_version', '\d+')::int >= 17 AS server_version_ge_17
|
||||||
|
\gset
|
||||||
|
|
||||||
|
\if :server_version_ge_17
|
||||||
|
SELECT '$$' ||
|
||||||
|
'SELECT colllocale FROM pg_collation WHERE collname = ''german_phonebook_test'';'
|
||||||
|
|| '$$'
|
||||||
|
AS worker_query_1 \gset
|
||||||
|
SELECT '$$' ||
|
||||||
|
'SELECT colllocale FROM pg_collation WHERE collname = ''default_provider'';'
|
||||||
|
|| '$$'
|
||||||
|
AS worker_query_2 \gset
|
||||||
|
\else
|
||||||
|
SELECT '$$' ||
|
||||||
|
'SELECT colliculocale FROM pg_collation WHERE collname = ''german_phonebook_test'';'
|
||||||
|
|| '$$'
|
||||||
|
AS worker_query_1 \gset
|
||||||
|
SELECT '$$' ||
|
||||||
|
'SELECT colliculocale FROM pg_collation WHERE collname = ''default_provider'';'
|
||||||
|
|| '$$'
|
||||||
|
AS worker_query_2 \gset
|
||||||
|
\endif
|
||||||
|
|
||||||
|
SELECT result FROM run_command_on_all_nodes(:worker_query_1);
|
||||||
|
|
||||||
-- with non-icu provider, colliculocale will be null, collcollate and collctype will be set
|
-- with non-icu provider, colliculocale will be null, collcollate and collctype will be set
|
||||||
CREATE COLLATION default_provider (provider = libc, lc_collate = "POSIX", lc_ctype = "POSIX");
|
CREATE COLLATION default_provider (provider = libc, lc_collate = "POSIX", lc_ctype = "POSIX");
|
||||||
|
@ -54,9 +81,7 @@ SELECT result FROM run_command_on_all_nodes('
|
||||||
SELECT result FROM run_command_on_all_nodes('
|
SELECT result FROM run_command_on_all_nodes('
|
||||||
SELECT collctype FROM pg_collation WHERE collname = ''default_provider'';
|
SELECT collctype FROM pg_collation WHERE collname = ''default_provider'';
|
||||||
');
|
');
|
||||||
SELECT result FROM run_command_on_all_nodes('
|
SELECT result FROM run_command_on_all_nodes(:worker_query_2);
|
||||||
SELECT colliculocale FROM pg_collation WHERE collname = ''default_provider'';
|
|
||||||
');
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- In PG15, Renaming triggers on partitioned tables had two problems
|
-- In PG15, Renaming triggers on partitioned tables had two problems
|
||||||
|
|
|
@ -159,7 +159,7 @@ CREATE TABLE test_collation_rules (a text);
|
||||||
SELECT create_distributed_table('test_collation_rules', 'a');
|
SELECT create_distributed_table('test_collation_rules', 'a');
|
||||||
INSERT INTO test_collation_rules VALUES ('Abernathy'), ('apple'), ('bird'), ('Boston'), ('Graham'), ('green');
|
INSERT INTO test_collation_rules VALUES ('Abernathy'), ('apple'), ('bird'), ('Boston'), ('Graham'), ('green');
|
||||||
|
|
||||||
SELECT collname, collprovider, colliculocale, collicurules
|
SELECT collname, collprovider, collicurules
|
||||||
FROM pg_collation
|
FROM pg_collation
|
||||||
WHERE collname like '%_rule%'
|
WHERE collname like '%_rule%'
|
||||||
ORDER BY 1;
|
ORDER BY 1;
|
||||||
|
@ -170,7 +170,7 @@ SELECT * FROM test_collation_rules ORDER BY a COLLATE special_rule;
|
||||||
\c - - - :worker_1_port
|
\c - - - :worker_1_port
|
||||||
SET search_path TO pg16;
|
SET search_path TO pg16;
|
||||||
|
|
||||||
SELECT collname, collprovider, colliculocale, collicurules
|
SELECT collname, collprovider, collicurules
|
||||||
FROM pg_collation
|
FROM pg_collation
|
||||||
WHERE collname like '%_rule%'
|
WHERE collname like '%_rule%'
|
||||||
ORDER BY 1;
|
ORDER BY 1;
|
||||||
|
|
Loading…
Reference in New Issue