mirror of https://github.com/citusdata/citus.git
PG16 - Add rules option to CREATE COLLATION (#7185)
Relevant PG commit: https://github.com/postgres/postgres/commit/30a53b7 30a53b7pg16_grant_inherit_set
parent
3747135908
commit
2fbffd2f98
|
@ -188,7 +188,16 @@ CreateCollationDDLInternal(Oid collationId, Oid *collowner, char **quotedCollati
|
||||||
pfree(collcollate);
|
pfree(collcollate);
|
||||||
pfree(collctype);
|
pfree(collctype);
|
||||||
#endif
|
#endif
|
||||||
|
#if PG_VERSION_NUM >= PG_VERSION_16
|
||||||
|
char *collicurules = NULL;
|
||||||
|
datum = SysCacheGetAttr(COLLOID, heapTuple, Anum_pg_collation_collicurules, &isnull);
|
||||||
|
if (!isnull)
|
||||||
|
{
|
||||||
|
collicurules = TextDatumGetCString(datum);
|
||||||
|
appendStringInfo(&collationNameDef, ", rules = %s",
|
||||||
|
quote_literal_cstr(collicurules));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if (!collisdeterministic)
|
if (!collisdeterministic)
|
||||||
{
|
{
|
||||||
appendStringInfoString(&collationNameDef, ", deterministic = false");
|
appendStringInfoString(&collationNameDef, ", deterministic = false");
|
||||||
|
|
|
@ -313,6 +313,90 @@ SELECT result FROM run_command_on_workers
|
||||||
DROP DATABASE
|
DROP DATABASE
|
||||||
(2 rows)
|
(2 rows)
|
||||||
|
|
||||||
|
SET search_path TO pg16;
|
||||||
|
-- New rules option added to CREATE COLLATION
|
||||||
|
-- Similar to above test with CREATE DATABASE
|
||||||
|
-- Relevant PG commit:
|
||||||
|
-- https://github.com/postgres/postgres/commit/30a53b7
|
||||||
|
CREATE COLLATION default_rule (provider = icu, locale = '');
|
||||||
|
NOTICE: using standard form "und" for ICU locale ""
|
||||||
|
CREATE COLLATION special_rule (provider = icu, locale = '', rules = '&a < g');
|
||||||
|
NOTICE: using standard form "und" for ICU locale ""
|
||||||
|
CREATE TABLE test_collation_rules (a text);
|
||||||
|
SELECT create_distributed_table('test_collation_rules', 'a');
|
||||||
|
create_distributed_table
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
INSERT INTO test_collation_rules VALUES ('Abernathy'), ('apple'), ('bird'), ('Boston'), ('Graham'), ('green');
|
||||||
|
SELECT collname, collprovider, colliculocale, collicurules
|
||||||
|
FROM pg_collation
|
||||||
|
WHERE collname like '%_rule%'
|
||||||
|
ORDER BY 1;
|
||||||
|
collname | collprovider | colliculocale | collicurules
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
default_rule | i | und |
|
||||||
|
special_rule | i | und | &a < g
|
||||||
|
(2 rows)
|
||||||
|
|
||||||
|
SELECT * FROM test_collation_rules ORDER BY a COLLATE default_rule;
|
||||||
|
a
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
Abernathy
|
||||||
|
apple
|
||||||
|
bird
|
||||||
|
Boston
|
||||||
|
Graham
|
||||||
|
green
|
||||||
|
(6 rows)
|
||||||
|
|
||||||
|
SELECT * FROM test_collation_rules ORDER BY a COLLATE special_rule;
|
||||||
|
a
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
Abernathy
|
||||||
|
apple
|
||||||
|
green
|
||||||
|
bird
|
||||||
|
Boston
|
||||||
|
Graham
|
||||||
|
(6 rows)
|
||||||
|
|
||||||
|
\c - - - :worker_1_port
|
||||||
|
SET search_path TO pg16;
|
||||||
|
SELECT collname, collprovider, colliculocale, collicurules
|
||||||
|
FROM pg_collation
|
||||||
|
WHERE collname like '%_rule%'
|
||||||
|
ORDER BY 1;
|
||||||
|
collname | collprovider | colliculocale | collicurules
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
default_rule | i | und |
|
||||||
|
special_rule | i | und | &a < g
|
||||||
|
(2 rows)
|
||||||
|
|
||||||
|
SELECT * FROM test_collation_rules ORDER BY a COLLATE default_rule;
|
||||||
|
a
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
Abernathy
|
||||||
|
apple
|
||||||
|
bird
|
||||||
|
Boston
|
||||||
|
Graham
|
||||||
|
green
|
||||||
|
(6 rows)
|
||||||
|
|
||||||
|
SELECT * FROM test_collation_rules ORDER BY a COLLATE special_rule;
|
||||||
|
a
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
Abernathy
|
||||||
|
apple
|
||||||
|
green
|
||||||
|
bird
|
||||||
|
Boston
|
||||||
|
Graham
|
||||||
|
(6 rows)
|
||||||
|
|
||||||
|
\c - - - :master_port
|
||||||
SET search_path TO pg16;
|
SET search_path TO pg16;
|
||||||
SET citus.next_shard_id TO 951000;
|
SET citus.next_shard_id TO 951000;
|
||||||
-- Foreign table TRUNCATE trigger
|
-- Foreign table TRUNCATE trigger
|
||||||
|
|
|
@ -146,6 +146,40 @@ DROP DATABASE test_db;
|
||||||
SELECT result FROM run_command_on_workers
|
SELECT result FROM run_command_on_workers
|
||||||
($$DROP DATABASE test_db$$);
|
($$DROP DATABASE test_db$$);
|
||||||
SET search_path TO pg16;
|
SET search_path TO pg16;
|
||||||
|
|
||||||
|
-- New rules option added to CREATE COLLATION
|
||||||
|
-- Similar to above test with CREATE DATABASE
|
||||||
|
-- Relevant PG commit:
|
||||||
|
-- https://github.com/postgres/postgres/commit/30a53b7
|
||||||
|
|
||||||
|
CREATE COLLATION default_rule (provider = icu, locale = '');
|
||||||
|
CREATE COLLATION special_rule (provider = icu, locale = '', rules = '&a < g');
|
||||||
|
|
||||||
|
CREATE TABLE test_collation_rules (a text);
|
||||||
|
SELECT create_distributed_table('test_collation_rules', 'a');
|
||||||
|
INSERT INTO test_collation_rules VALUES ('Abernathy'), ('apple'), ('bird'), ('Boston'), ('Graham'), ('green');
|
||||||
|
|
||||||
|
SELECT collname, collprovider, colliculocale, collicurules
|
||||||
|
FROM pg_collation
|
||||||
|
WHERE collname like '%_rule%'
|
||||||
|
ORDER BY 1;
|
||||||
|
|
||||||
|
SELECT * FROM test_collation_rules ORDER BY a COLLATE default_rule;
|
||||||
|
SELECT * FROM test_collation_rules ORDER BY a COLLATE special_rule;
|
||||||
|
|
||||||
|
\c - - - :worker_1_port
|
||||||
|
SET search_path TO pg16;
|
||||||
|
|
||||||
|
SELECT collname, collprovider, colliculocale, collicurules
|
||||||
|
FROM pg_collation
|
||||||
|
WHERE collname like '%_rule%'
|
||||||
|
ORDER BY 1;
|
||||||
|
|
||||||
|
SELECT * FROM test_collation_rules ORDER BY a COLLATE default_rule;
|
||||||
|
SELECT * FROM test_collation_rules ORDER BY a COLLATE special_rule;
|
||||||
|
|
||||||
|
\c - - - :master_port
|
||||||
|
SET search_path TO pg16;
|
||||||
SET citus.next_shard_id TO 951000;
|
SET citus.next_shard_id TO 951000;
|
||||||
|
|
||||||
-- Foreign table TRUNCATE trigger
|
-- Foreign table TRUNCATE trigger
|
||||||
|
|
Loading…
Reference in New Issue