From 87d3b66ddb979c4a21703e7328c373a79023c78e Mon Sep 17 00:00:00 2001 From: Brent Doil Date: Fri, 26 Jan 2024 10:32:27 -0500 Subject: [PATCH 1/2] Revert "Ban enums as distribution and partition keys" This reverts commit a863997e6459e907979478f013b588447385ca07. The issues with restoring enums in distribution and partition keys has been resolved in pg_dump by the cherry-pick of 7e7c5b683985c85fb990c4d49ab960cbc83434b4. A gpbackup fix disables gp_enable_segment_copy_checking before loading a table/matview with an enum hash distribution/partition, then reorganizing the table after it's loaded and resetting the GUC. With these two changes it's safe to unban enums as distribution and hash keys. --- contrib/btree_gin/expected/enum.out | 29 ++- contrib/btree_gin/sql/enum.sql | 25 ++- src/backend/commands/tablecmds.c | 5 - src/backend/parser/parse_utilcmd.c | 7 - src/test/regress/expected/enum.out | 170 +++++++++--------- .../regress/expected/enum_dist_part_ban.out | 24 --- .../expected/gpdist_legacy_opclasses.out | 27 ++- .../gpdist_legacy_opclasses_optimizer.out | 28 ++- src/test/regress/expected/partition_prune.out | 10 +- .../expected/partition_prune_optimizer.out | 4 +- src/test/regress/greenplum_schedule | 2 - src/test/regress/sql/enum.sql | 22 +-- src/test/regress/sql/enum_dist_part_ban.sql | 22 --- .../regress/sql/gpdist_legacy_opclasses.sql | 8 +- src/test/regress/sql/partition_prune.sql | 2 +- 15 files changed, 147 insertions(+), 238 deletions(-) delete mode 100644 src/test/regress/expected/enum_dist_part_ban.out delete mode 100644 src/test/regress/sql/enum_dist_part_ban.sql diff --git a/contrib/btree_gin/expected/enum.out b/contrib/btree_gin/expected/enum.out index 2b0ddf11eb3..c4ac1174ea2 100644 --- a/contrib/btree_gin/expected/enum.out +++ b/contrib/btree_gin/expected/enum.out @@ -1,14 +1,11 @@ set enable_seqscan=off; CREATE TYPE rainbow AS ENUM ('r','o','y','g','b','i','v'); CREATE TABLE test_enum ( - h int, i rainbow ); -NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'h' as the Greenplum Database data distribution key for this table. -HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. -INSERT INTO test_enum VALUES (1, 'v'),(2, 'y'),(3, 'r'),(4, 'g'),(5, 'o'),(6, 'i'),(7, 'b'); +INSERT INTO test_enum VALUES ('v'),('y'),('r'),('g'),('o'),('i'),('b'); CREATE INDEX idx_enum ON test_enum USING gin (i); -SELECT i FROM test_enum WHERE i<'g'::rainbow ORDER BY i; +SELECT * FROM test_enum WHERE i<'g'::rainbow ORDER BY i; i --- r @@ -16,7 +13,7 @@ SELECT i FROM test_enum WHERE i<'g'::rainbow ORDER BY i; y (3 rows) -SELECT i FROM test_enum WHERE i<='g'::rainbow ORDER BY i; +SELECT * FROM test_enum WHERE i<='g'::rainbow ORDER BY i; i --- r @@ -25,13 +22,13 @@ SELECT i FROM test_enum WHERE i<='g'::rainbow ORDER BY i; g (4 rows) -SELECT i FROM test_enum WHERE i='g'::rainbow ORDER BY i; +SELECT * FROM test_enum WHERE i='g'::rainbow ORDER BY i; i --- g (1 row) -SELECT i FROM test_enum WHERE i>='g'::rainbow ORDER BY i; +SELECT * FROM test_enum WHERE i>='g'::rainbow ORDER BY i; i --- g @@ -40,7 +37,7 @@ SELECT i FROM test_enum WHERE i>='g'::rainbow ORDER BY i; v (4 rows) -SELECT i FROM test_enum WHERE i>'g'::rainbow ORDER BY i; +SELECT * FROM test_enum WHERE i>'g'::rainbow ORDER BY i; i --- b @@ -48,7 +45,7 @@ SELECT i FROM test_enum WHERE i>'g'::rainbow ORDER BY i; v (3 rows) -explain (costs off) SELECT i FROM test_enum WHERE i>='g'::rainbow ORDER BY i; +explain (costs off) SELECT * FROM test_enum WHERE i>='g'::rainbow ORDER BY i; QUERY PLAN ----------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) @@ -59,17 +56,11 @@ explain (costs off) SELECT i FROM test_enum WHERE i>='g'::rainbow ORDER BY i; Recheck Cond: (i >= 'g'::rainbow) -> Bitmap Index Scan on idx_enum Index Cond: (i >= 'g'::rainbow) - Optimizer: Pivotal Optimizer (GPORCA) + Optimizer: Postgres query optimizer (9 rows) -- make sure we handle the non-evenly-numbered oid case for enums create type e as enum ('0', '2', '3'); alter type e add value '1' after '0'; -CREATE TABLE t ( - h int, - i e -); -NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'h' as the Greenplum Database data distribution key for this table. -HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. -insert into t select j, (j % 4)::text::e from generate_series(0, 100000) as j; -create index on t using gin (i); +create table t as select (i % 4)::text::e from generate_series(0, 100000) as i; +create index on t using gin (e); diff --git a/contrib/btree_gin/sql/enum.sql b/contrib/btree_gin/sql/enum.sql index 9876be88c85..f35162f8f58 100644 --- a/contrib/btree_gin/sql/enum.sql +++ b/contrib/btree_gin/sql/enum.sql @@ -1,30 +1,25 @@ set enable_seqscan=off; + CREATE TYPE rainbow AS ENUM ('r','o','y','g','b','i','v'); CREATE TABLE test_enum ( - h int, i rainbow ); -INSERT INTO test_enum VALUES (1, 'v'),(2, 'y'),(3, 'r'),(4, 'g'),(5, 'o'),(6, 'i'),(7, 'b'); +INSERT INTO test_enum VALUES ('v'),('y'),('r'),('g'),('o'),('i'),('b'); CREATE INDEX idx_enum ON test_enum USING gin (i); -SELECT i FROM test_enum WHERE i<'g'::rainbow ORDER BY i; -SELECT i FROM test_enum WHERE i<='g'::rainbow ORDER BY i; -SELECT i FROM test_enum WHERE i='g'::rainbow ORDER BY i; -SELECT i FROM test_enum WHERE i>='g'::rainbow ORDER BY i; -SELECT i FROM test_enum WHERE i>'g'::rainbow ORDER BY i; +SELECT * FROM test_enum WHERE i<'g'::rainbow ORDER BY i; +SELECT * FROM test_enum WHERE i<='g'::rainbow ORDER BY i; +SELECT * FROM test_enum WHERE i='g'::rainbow ORDER BY i; +SELECT * FROM test_enum WHERE i>='g'::rainbow ORDER BY i; +SELECT * FROM test_enum WHERE i>'g'::rainbow ORDER BY i; -explain (costs off) SELECT i FROM test_enum WHERE i>='g'::rainbow ORDER BY i; +explain (costs off) SELECT * FROM test_enum WHERE i>='g'::rainbow ORDER BY i; -- make sure we handle the non-evenly-numbered oid case for enums create type e as enum ('0', '2', '3'); alter type e add value '1' after '0'; - -CREATE TABLE t ( - h int, - i e -); -insert into t select j, (j % 4)::text::e from generate_series(0, 100000) as j; -create index on t using gin (i); +create table t as select (i % 4)::text::e from generate_series(0, 100000) as i; +create index on t using gin (e); diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 1d2e701cfd9..ddc6c3243c2 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -22118,11 +22118,6 @@ ComputePartitionAttrs(ParseState *pstate, Relation rel, List *partParams, AttrNu } } - if (strategy == PARTITION_STRATEGY_HASH && type_is_enum(atttype)) - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot use ENUM column \"%s\" in PARTITION BY statement for hash partitions", pelem->name))); - /* * Apply collation override if any */ diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c index 52b98c65ee1..3d6f5f0dd82 100644 --- a/src/backend/parser/parse_utilcmd.c +++ b/src/backend/parser/parse_utilcmd.c @@ -3120,13 +3120,6 @@ getPolicyForDistributedBy(DistributedBy *distributedBy, TupleDesc tupdesc) if (strcmp(colname, NameStr(attr->attname)) == 0) { Oid opclass; - Oid typid; - - typid = getBaseType(attr->atttypid); - if (type_is_enum(typid)) - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot use ENUM column \"%s\" in DISTRIBUTED BY statement", colname))); opclass = cdb_get_opclass_for_column_def(dkelem->opclass, attr->atttypid); diff --git a/src/test/regress/expected/enum.out b/src/test/regress/expected/enum.out index 615e7781c7a..40e7465e156 100644 --- a/src/test/regress/expected/enum.out +++ b/src/test/regress/expected/enum.out @@ -226,71 +226,71 @@ ORDER BY enumsortorder; -- -- Basic table creation, row selection -- -CREATE TABLE enumtest (i int, col rainbow); -INSERT INTO enumtest values (1, 'red'), (2, 'orange'), (3, 'yellow'), (4, 'green'); -COPY enumtest (i, col) FROM stdin; +CREATE TABLE enumtest (col rainbow); +INSERT INTO enumtest values ('red'), ('orange'), ('yellow'), ('green'); +COPY enumtest FROM stdin; SELECT * FROM enumtest; - i | col ----+-------- - 5 | blue - 6 | purple - 2 | orange - 3 | yellow - 4 | green - 1 | red + col +-------- + red + orange + yellow + green + blue + purple (6 rows) -- -- Operators, no index -- SELECT * FROM enumtest WHERE col = 'orange'; - i | col ----+-------- - 2 | orange + col +-------- + orange (1 row) SELECT * FROM enumtest WHERE col <> 'orange' ORDER BY col; - i | col ----+-------- - 1 | red - 3 | yellow - 4 | green - 5 | blue - 6 | purple + col +-------- + red + yellow + green + blue + purple (5 rows) SELECT * FROM enumtest WHERE col > 'yellow' ORDER BY col; - i | col ----+-------- - 4 | green - 5 | blue - 6 | purple + col +-------- + green + blue + purple (3 rows) SELECT * FROM enumtest WHERE col >= 'yellow' ORDER BY col; - i | col ----+-------- - 3 | yellow - 4 | green - 5 | blue - 6 | purple + col +-------- + yellow + green + blue + purple (4 rows) SELECT * FROM enumtest WHERE col < 'green' ORDER BY col; - i | col ----+-------- - 1 | red - 2 | orange - 3 | yellow + col +-------- + red + orange + yellow (3 rows) SELECT * FROM enumtest WHERE col <= 'green' ORDER BY col; - i | col ----+-------- - 1 | red - 2 | orange - 3 | yellow - 4 | green + col +-------- + red + orange + yellow + green (4 rows) -- @@ -339,53 +339,53 @@ SET enable_bitmapscan = off; -- CREATE INDEX enumtest_btree ON enumtest USING btree (col); SELECT * FROM enumtest WHERE col = 'orange'; - i | col ----+-------- - 2 | orange + col +-------- + orange (1 row) SELECT * FROM enumtest WHERE col <> 'orange' ORDER BY col; - i | col ----+-------- - 1 | red - 3 | yellow - 4 | green - 5 | blue - 6 | purple + col +-------- + red + yellow + green + blue + purple (5 rows) SELECT * FROM enumtest WHERE col > 'yellow' ORDER BY col; - i | col ----+-------- - 4 | green - 5 | blue - 6 | purple + col +-------- + green + blue + purple (3 rows) SELECT * FROM enumtest WHERE col >= 'yellow' ORDER BY col; - i | col ----+-------- - 3 | yellow - 4 | green - 5 | blue - 6 | purple + col +-------- + yellow + green + blue + purple (4 rows) SELECT * FROM enumtest WHERE col < 'green' ORDER BY col; - i | col ----+-------- - 1 | red - 2 | orange - 3 | yellow + col +-------- + red + orange + yellow (3 rows) SELECT * FROM enumtest WHERE col <= 'green' ORDER BY col; - i | col ----+-------- - 1 | red - 2 | orange - 3 | yellow - 4 | green + col +-------- + red + orange + yellow + green (4 rows) SELECT min(col) FROM enumtest; @@ -412,9 +412,9 @@ DROP INDEX enumtest_btree; -- CREATE INDEX enumtest_hash ON enumtest USING hash (col); SELECT * FROM enumtest WHERE col = 'orange'; - i | col ----+-------- - 2 | orange + col +-------- + orange (1 row) DROP INDEX enumtest_hash; @@ -565,11 +565,11 @@ DROP FUNCTION echo_me(rainbow); -- -- RI triggers on enum types -- -CREATE TABLE enumtest_parent (i int PRIMARY KEY, id rainbow); -CREATE TABLE enumtest_child (i int REFERENCES enumtest_parent, parent rainbow); -INSERT INTO enumtest_parent VALUES (1, 'red'); -INSERT INTO enumtest_child VALUES (1, 'red'); -INSERT INTO enumtest_child VALUES (2, 'blue'); -- fail +CREATE TABLE enumtest_parent (id rainbow PRIMARY KEY); +CREATE TABLE enumtest_child (parent rainbow REFERENCES enumtest_parent); +INSERT INTO enumtest_parent VALUES ('red'); +INSERT INTO enumtest_child VALUES ('red'); +INSERT INTO enumtest_child VALUES ('blue'); -- fail -- start_ignore -- foreign keys are not checked in GPDB, hence these pass. -- end_ignore @@ -578,9 +578,9 @@ DELETE FROM enumtest_parent; -- fail -- cross-type RI should fail -- CREATE TYPE bogus AS ENUM('good', 'bad', 'ugly'); -CREATE TABLE enumtest_bogus_child(i int, parent bogus REFERENCES enumtest_parent); +CREATE TABLE enumtest_bogus_child(parent bogus REFERENCES enumtest_parent); ERROR: foreign key constraint "enumtest_bogus_child_parent_fkey" cannot be implemented -DETAIL: Key columns "parent" and "i" are of incompatible types: bogus and integer. +DETAIL: Key columns "parent" and "id" are of incompatible types: bogus and rainbow. DROP TYPE bogus; -- check renaming a value ALTER TYPE rainbow RENAME VALUE 'red' TO 'crimson'; diff --git a/src/test/regress/expected/enum_dist_part_ban.out b/src/test/regress/expected/enum_dist_part_ban.out deleted file mode 100644 index addc5b89a5e..00000000000 --- a/src/test/regress/expected/enum_dist_part_ban.out +++ /dev/null @@ -1,24 +0,0 @@ --- test that distributing or hash partitioning by an enum field or expression is blocked -CREATE DATABASE ban_enum; -\c ban_enum --- create a test enum -create type colorEnum as enum ('r', 'g', 'b'); --- hash partition by enum column name -create table part (a int, b colorEnum) partition by hash(b); -NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Apache Cloudberry data distribution key for this table. -HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. -ERROR: cannot use ENUM column "b" in PARTITION BY statement for hash partitions --- hash partition by enum column expression -create table part (a int, b colorEnum) partition by hash((b)); -NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Apache Cloudberry data distribution key for this table. -HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. -ERROR: cannot use ENUM column "(null)" in PARTITION BY statement for hash partitions --- distribute by enum column -create table distr (a colorEnum, b int); -NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Apache Cloudberry data distribution key for this table. -HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. -ERROR: cannot use ENUM column "a" in DISTRIBUTED BY statement --- clean up database -drop type colorEnum; -\c regression -DROP DATABASE ban_enum; diff --git a/src/test/regress/expected/gpdist_legacy_opclasses.out b/src/test/regress/expected/gpdist_legacy_opclasses.out index 920bcb7f9ad..58b353c86d7 100644 --- a/src/test/regress/expected/gpdist_legacy_opclasses.out +++ b/src/test/regress/expected/gpdist_legacy_opclasses.out @@ -296,34 +296,27 @@ explain (costs off) select * from modern_int a inner join legacy_domain_over_int Optimizer: Postgres query optimizer (9 rows) --- Distributing by enum has been banned, so this test is updated to instead distribute by a dummy int column --- Banned because in backup/restore scenarios the data will be in the "wrong" segment as oids for each enum --- entry are re-generated and hashing them will result in arbitrary segment assignment. create type colors as enum ('red', 'green', 'blue'); -create table legacy_enum(col1 int, color colors) distributed by(col1); -insert into legacy_enum values (1, 'red'), (2, 'green'), (3, 'blue'); +create table legacy_enum(color colors) distributed by(color cdbhash_enum_ops); +insert into legacy_enum values ('red'), ('green'), ('blue'); explain (costs off) select * from legacy_enum a inner join legacy_enum b on a.color = b.color; QUERY PLAN --------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) -> Hash Join Hash Cond: (a.color = b.color) - -> Redistribute Motion 3:3 (slice2; segments: 3) - Hash Key: a.color - -> Seq Scan on legacy_enum a + -> Seq Scan on legacy_enum a -> Hash - -> Redistribute Motion 3:3 (slice3; segments: 3) - Hash Key: b.color - -> Seq Scan on legacy_enum b + -> Seq Scan on legacy_enum b Optimizer: Postgres query optimizer -(11 rows) +(7 rows) select * from legacy_enum a inner join legacy_enum b on a.color = b.color; - col1 | color | col1 | color -------+-------+------+------- - 3 | blue | 3 | blue - 2 | green | 2 | green - 1 | red | 1 | red + color | color +-------+------- + blue | blue + red | red + green | green (3 rows) -- diff --git a/src/test/regress/expected/gpdist_legacy_opclasses_optimizer.out b/src/test/regress/expected/gpdist_legacy_opclasses_optimizer.out index e02b9a3f00e..17ac0786a8f 100644 --- a/src/test/regress/expected/gpdist_legacy_opclasses_optimizer.out +++ b/src/test/regress/expected/gpdist_legacy_opclasses_optimizer.out @@ -295,31 +295,27 @@ explain (costs off) select * from modern_int a inner join legacy_domain_over_int Optimizer: Postgres query optimizer (9 rows) --- Distributing by enum has been banned, so this test is updated to instead distribute by a dummy int column --- Banned because in backup/restore scenarios the data will be in the "wrong" segment as oids for each enum --- entry are re-generated and hashing them will result in arbitrary segment assignment. create type colors as enum ('red', 'green', 'blue'); -create table legacy_enum(col1 int, color colors) distributed by(col1); -insert into legacy_enum values (1, 'red'), (2, 'green'), (3, 'blue'); +create table legacy_enum(color colors) distributed by(color cdbhash_enum_ops); +insert into legacy_enum values ('red'), ('green'), ('blue'); explain (costs off) select * from legacy_enum a inner join legacy_enum b on a.color = b.color; - QUERY PLAN ---------------------------------------------- + QUERY PLAN +-------------------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) -> Hash Join Hash Cond: ((a.color)::anyenum = (b.color)::anyenum) -> Seq Scan on legacy_enum a -> Hash - -> Broadcast Motion 3:3 (slice2; segments: 3) - -> Seq Scan on legacy_enum b - Optimizer: Pivotal Optimizer (GPORCA) version 3.41.0 -(8 rows) + -> Seq Scan on legacy_enum b + Optimizer: GPORCA +(7 rows) select * from legacy_enum a inner join legacy_enum b on a.color = b.color; - col1 | color | col1 | color -------+-------+------+------- - 2 | green | 2 | green - 3 | blue | 3 | blue - 1 | red | 1 | red + color | color +-------+------- + blue | blue + red | red + green | green (3 rows) -- diff --git a/src/test/regress/expected/partition_prune.out b/src/test/regress/expected/partition_prune.out index 96baf6cbb4e..adb72e409f1 100644 --- a/src/test/regress/expected/partition_prune.out +++ b/src/test/regress/expected/partition_prune.out @@ -4357,17 +4357,15 @@ explain (costs off) select * from pph_arrpart where a in ('{4, 5}', '{1}'); drop table pph_arrpart; -- enum type list partition key create type pp_colors as enum ('green', 'blue', 'black'); -create table pp_enumpart (col1 int, a pp_colors) partition by list (a); -NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'col1' as the Apache Cloudberry data distribution key for this table. -HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. +create table pp_enumpart (a pp_colors) partition by list (a); create table pp_enumpart_green partition of pp_enumpart for values in ('green'); NOTICE: table has parent, setting distribution columns to match parent table create table pp_enumpart_blue partition of pp_enumpart for values in ('blue'); NOTICE: table has parent, setting distribution columns to match parent table explain (costs off) select * from pp_enumpart where a = 'blue'; - QUERY PLAN ------------------------------------------------- - Gather Motion 3:1 (slice1; segments: 3) + QUERY PLAN +------------------------------------------ + Gather Motion 1:1 (slice1; segments: 1) -> Seq Scan on pp_enumpart_blue pp_enumpart Filter: (a = 'blue'::pp_colors) Optimizer: Postgres query optimizer diff --git a/src/test/regress/expected/partition_prune_optimizer.out b/src/test/regress/expected/partition_prune_optimizer.out index f3640ade989..72e87807c8a 100644 --- a/src/test/regress/expected/partition_prune_optimizer.out +++ b/src/test/regress/expected/partition_prune_optimizer.out @@ -3597,7 +3597,7 @@ explain (costs off) select * from pph_arrpart where a in ('{4, 5}', '{1}'); drop table pph_arrpart; -- enum type list partition key create type pp_colors as enum ('green', 'blue', 'black'); -create table pp_enumpart (col1 int, a pp_colors) partition by list (a); +create table pp_enumpart (a pp_colors) partition by list (a); NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Apache Cloudberry data distribution key for this table. HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. create table pp_enumpart_green partition of pp_enumpart for values in ('green'); @@ -3605,7 +3605,7 @@ create table pp_enumpart_blue partition of pp_enumpart for values in ('blue'); explain (costs off) select * from pp_enumpart where a = 'blue'; QUERY PLAN ------------------------------------------ - Gather Motion 3:1 (slice1; segments: 3) + Gather Motion 1:1 (slice1; segments: 1) -> Dynamic Seq Scan on pp_enumpart Number of partitions to scan: 1 (out of 2) Filter: (a = 'blue'::pp_colors) diff --git a/src/test/regress/greenplum_schedule b/src/test/regress/greenplum_schedule index ecaa6534cea..53ebeb5f48a 100755 --- a/src/test/regress/greenplum_schedule +++ b/src/test/regress/greenplum_schedule @@ -373,8 +373,6 @@ test: dynamic_table # DML tests for AO/CO unique indexes. test: uao_dml/uao_dml_unique_index_delete_row uao_dml/uao_dml_unique_index_delete_column uao_dml/uao_dml_unique_index_update_row uao_dml/uao_dml_unique_index_update_column -# test that distributing or hash partitioning by an enum field or expression is blocked -test: enum_dist_part_ban # run pg_hba raleted testing test: hba_conf diff --git a/src/test/regress/sql/enum.sql b/src/test/regress/sql/enum.sql index bdf1c9b48f0..c2d23b5ed68 100644 --- a/src/test/regress/sql/enum.sql +++ b/src/test/regress/sql/enum.sql @@ -128,11 +128,11 @@ ORDER BY enumsortorder; -- -- Basic table creation, row selection -- -CREATE TABLE enumtest (i int, col rainbow); -INSERT INTO enumtest values (1, 'red'), (2, 'orange'), (3, 'yellow'), (4, 'green'); -COPY enumtest (i, col) FROM stdin; -5 blue -6 purple +CREATE TABLE enumtest (col rainbow); +INSERT INTO enumtest values ('red'), ('orange'), ('yellow'), ('green'); +COPY enumtest FROM stdin; +blue +purple \. SELECT * FROM enumtest; @@ -252,17 +252,17 @@ DROP FUNCTION echo_me(rainbow); -- -- RI triggers on enum types -- -CREATE TABLE enumtest_parent (i int PRIMARY KEY, id rainbow); -CREATE TABLE enumtest_child (i int REFERENCES enumtest_parent, parent rainbow); -INSERT INTO enumtest_parent VALUES (1, 'red'); -INSERT INTO enumtest_child VALUES (1, 'red'); -INSERT INTO enumtest_child VALUES (2, 'blue'); -- fail +CREATE TABLE enumtest_parent (id rainbow PRIMARY KEY); +CREATE TABLE enumtest_child (parent rainbow REFERENCES enumtest_parent); +INSERT INTO enumtest_parent VALUES ('red'); +INSERT INTO enumtest_child VALUES ('red'); +INSERT INTO enumtest_child VALUES ('blue'); -- fail DELETE FROM enumtest_parent; -- fail -- -- cross-type RI should fail -- CREATE TYPE bogus AS ENUM('good', 'bad', 'ugly'); -CREATE TABLE enumtest_bogus_child(i int, parent bogus REFERENCES enumtest_parent); +CREATE TABLE enumtest_bogus_child(parent bogus REFERENCES enumtest_parent); DROP TYPE bogus; -- check renaming a value diff --git a/src/test/regress/sql/enum_dist_part_ban.sql b/src/test/regress/sql/enum_dist_part_ban.sql deleted file mode 100644 index 23ff33fc589..00000000000 --- a/src/test/regress/sql/enum_dist_part_ban.sql +++ /dev/null @@ -1,22 +0,0 @@ --- test that distributing or hash partitioning by an enum field or expression is blocked - -CREATE DATABASE ban_enum; -\c ban_enum - --- create a test enum -create type colorEnum as enum ('r', 'g', 'b'); - --- hash partition by enum column name -create table part (a int, b colorEnum) partition by hash(b); - --- hash partition by enum column expression -create table part (a int, b colorEnum) partition by hash((b)); - --- distribute by enum column -create table distr (a colorEnum, b int); - - --- clean up database -drop type colorEnum; -\c regression -DROP DATABASE ban_enum; diff --git a/src/test/regress/sql/gpdist_legacy_opclasses.sql b/src/test/regress/sql/gpdist_legacy_opclasses.sql index 394cca51d47..2170e93c64f 100644 --- a/src/test/regress/sql/gpdist_legacy_opclasses.sql +++ b/src/test/regress/sql/gpdist_legacy_opclasses.sql @@ -168,13 +168,9 @@ explain (costs off) select * from legacy_domain_over_int a inner join legacy_dom explain (costs off) select * from legacy_int a inner join legacy_domain_over_int b on a.id = b.id; explain (costs off) select * from modern_int a inner join legacy_domain_over_int b on a.id = b.id; - --- Distributing by enum has been banned, so this test is updated to instead distribute by a dummy int column --- Banned because in backup/restore scenarios the data will be in the "wrong" segment as oids for each enum --- entry are re-generated and hashing them will result in arbitrary segment assignment. create type colors as enum ('red', 'green', 'blue'); -create table legacy_enum(col1 int, color colors) distributed by(col1); -insert into legacy_enum values (1, 'red'), (2, 'green'), (3, 'blue'); +create table legacy_enum(color colors) distributed by(color cdbhash_enum_ops); +insert into legacy_enum values ('red'), ('green'), ('blue'); explain (costs off) select * from legacy_enum a inner join legacy_enum b on a.color = b.color; select * from legacy_enum a inner join legacy_enum b on a.color = b.color; diff --git a/src/test/regress/sql/partition_prune.sql b/src/test/regress/sql/partition_prune.sql index ef2a1a73071..3655bc48722 100644 --- a/src/test/regress/sql/partition_prune.sql +++ b/src/test/regress/sql/partition_prune.sql @@ -1035,7 +1035,7 @@ drop table pph_arrpart; -- enum type list partition key create type pp_colors as enum ('green', 'blue', 'black'); -create table pp_enumpart (col1 int, a pp_colors) partition by list (a); +create table pp_enumpart (a pp_colors) partition by list (a); create table pp_enumpart_green partition of pp_enumpart for values in ('green'); create table pp_enumpart_blue partition of pp_enumpart for values in ('blue'); explain (costs off) select * from pp_enumpart where a = 'blue'; From f85357f96ed1095f6a036f2f5239a3198c108979 Mon Sep 17 00:00:00 2001 From: liushengsong Date: Tue, 10 Feb 2026 17:38:38 +0800 Subject: [PATCH 2/2] fix: fix contrib --- contrib/Makefile | 4 + contrib/adminpack/expected/adminpack.out | 83 +------------- contrib/amcheck/expected/check_btree.out | 1 + contrib/amcheck/sql/check_btree.sql | 1 + contrib/amcheck/t/001_verify_heapam.pl | 4 - contrib/amcheck/t/002_cic.pl | 19 ---- contrib/amcheck/t/003_cic_2pc.pl | 102 ----------------- .../auto_explain/expected/auto_explain.out | 3 - contrib/auto_explain/t/001_auto_explain.pl | 14 --- contrib/bloom/t/001_wal.pl | 17 --- contrib/btree_gist/expected/bool.out | 14 ++- contrib/btree_gist/expected/inet.out | 2 +- contrib/file_fdw/expected/.gitignore | 5 - contrib/file_fdw/expected/file_fdw.out | 29 +---- ...ptimizer.source => file_fdw_optimizer.out} | 2 + .../{gp_file_fdw.source => gp_file_fdw.out} | 14 ++- ...mizer.source => gp_file_fdw_optimizer.out} | 0 contrib/file_fdw/sql/.gitignore | 2 - .../{gp_file_fdw.source => gp_file_fdw.sql} | 18 ++- contrib/intarray/expected/_int.out | 2 + contrib/pageinspect/expected/btree.out | 3 - contrib/pageinspect/expected/gist.out | 24 ---- contrib/pageinspect/expected/page.out | 3 - contrib/pageinspect/sql/brin.sql | 9 -- contrib/pageinspect/sql/btree.sql | 3 - contrib/pageinspect/sql/gist.sql | 14 --- contrib/pageinspect/sql/page.sql | 3 - .../passwordcheck/expected/passwordcheck.out | 6 +- contrib/pg_freespacemap/.gitignore | 3 - .../pg_stat_statements/pg_stat_statements.c | 1 - contrib/pg_trgm/expected/pg_trgm.out | 19 +--- contrib/pgcrypto/expected/blowfish_1.out | 95 ---------------- contrib/pgcrypto/expected/cast5_1.out | 48 -------- contrib/pgcrypto/expected/des_1.out | 31 ------ contrib/pgcrypto/expected/pgp-decrypt_1.out | 63 ----------- contrib/pgcrypto/expected/sha2.out | 35 ------ contrib/pgcrypto/openssl.c | 8 -- contrib/pgcrypto/pgcrypto.c | 3 - contrib/pgcrypto/sql/sha2.sql | 21 ---- contrib/pgrowlocks/.gitignore | 3 - .../postgres_fdw/expected/postgres_fdw.out | 105 ------------------ contrib/postgres_fdw/sql/postgres_fdw.sql | 40 ------- contrib/seg/expected/seg.out | 11 -- contrib/seg/sql/seg.sql | 5 - contrib/sepgsql/expected/ddl.out | 4 - contrib/test_decoding/expected/replorigin.out | 3 - contrib/test_decoding/sql/replorigin.sql | 3 - src/include/utils/numeric.h | 1 + 48 files changed, 53 insertions(+), 850 deletions(-) delete mode 100644 contrib/file_fdw/expected/.gitignore rename contrib/file_fdw/expected/{file_fdw_optimizer.source => file_fdw_optimizer.out} (99%) rename contrib/file_fdw/expected/{gp_file_fdw.source => gp_file_fdw.out} (91%) rename contrib/file_fdw/expected/{gp_file_fdw_optimizer.source => gp_file_fdw_optimizer.out} (100%) delete mode 100644 contrib/file_fdw/sql/.gitignore rename contrib/file_fdw/sql/{gp_file_fdw.source => gp_file_fdw.sql} (80%) diff --git a/contrib/Makefile b/contrib/Makefile index b00ddbc1345..ec92cf8e933 100644 --- a/contrib/Makefile +++ b/contrib/Makefile @@ -11,6 +11,10 @@ include $(top_builddir)/src/Makefile.global # adminpack is disabled since the functionality has been imported into # GPDB. +# FIXME: installcheck for extension pageinspect, pg_visibility, postgres_fdw, +# seg, tsm_system_rows, tsm_system_time, xml2 is failed, which is also failed +# in gpdb. We'll fix it if we need these plugins to work properly. + SUBDIRS = \ amcheck \ auth_delay \ diff --git a/contrib/adminpack/expected/adminpack.out b/contrib/adminpack/expected/adminpack.out index 30b9b6f61bc..9ec9f5a5456 100644 --- a/contrib/adminpack/expected/adminpack.out +++ b/contrib/adminpack/expected/adminpack.out @@ -36,32 +36,19 @@ SELECT pg_read_file('test_file1'); -- disallowed file paths for non-superusers and users who are -- not members of pg_write_server_files -<<<<<<< HEAD -CREATE ROLE regress_user1; -NOTICE: resource queue required -- using default resource queue "pg_default" -GRANT pg_read_all_settings TO regress_user1; -GRANT EXECUTE ON FUNCTION pg_file_write(text,text,bool) TO regress_user1; -SET ROLE regress_user1; -SELECT pg_file_write('../test_file0', 'test0', false); -ERROR: only superuser may access generic file functions -======= CREATE ROLE regress_adminpack_user1; +NOTICE: resource queue required -- using default resource queue "pg_default" GRANT pg_read_all_settings TO regress_adminpack_user1; GRANT EXECUTE ON FUNCTION pg_file_write(text,text,bool) TO regress_adminpack_user1; SET ROLE regress_adminpack_user1; SELECT pg_file_write('../test_file0', 'test0', false); ERROR: path must be in or below the data directory ->>>>>>> REL_16_9 SELECT pg_file_write('/tmp/test_file0', 'test0', false); ERROR: only superuser may access generic file functions SELECT pg_file_write(current_setting('data_directory') || '/test_file4', 'test4', false); ERROR: only superuser may access generic file functions SELECT pg_file_write(current_setting('data_directory') || '/../test_file4', 'test4', false); -<<<<<<< HEAD -ERROR: only superuser may access generic file functions -======= ERROR: absolute path not allowed ->>>>>>> REL_16_9 RESET ROLE; REVOKE EXECUTE ON FUNCTION pg_file_write(text,text,bool) FROM regress_adminpack_user1; REVOKE pg_read_all_settings FROM regress_adminpack_user1; @@ -163,14 +150,9 @@ SELECT pg_file_unlink('test_file4'); (1 row) -- superuser checks -<<<<<<< HEAD -CREATE USER regress_user1; -NOTICE: resource queue required -- using default resource queue "pg_default" -SET ROLE regress_user1; -======= CREATE USER regress_adminpack_user1; +NOTICE: resource queue required -- using default resource queue "pg_default" SET ROLE regress_adminpack_user1; ->>>>>>> REL_16_9 SELECT pg_file_write('test_file0', 'test0', false); ERROR: permission denied for function pg_file_write SELECT pg_file_sync('test_file0'); @@ -183,67 +165,6 @@ ERROR: permission denied for function pg_file_unlink SELECT pg_logdir_ls(); ERROR: permission denied for function pg_logdir_ls RESET ROLE; -<<<<<<< HEAD -DROP USER regress_user1; --- allowed file paths for superuser test -CREATE ROLE regress_superuser1 SUPERUSER; -GRANT pg_read_all_settings TO regress_superuser1; -GRANT EXECUTE ON FUNCTION pg_file_write(text,text,bool) TO regress_superuser1; -SET ROLE regress_superuser1; -SELECT pg_file_write('../supper_test_file0', 'test0', false); - pg_file_write ---------------- - 5 -(1 row) - -SELECT pg_file_write('/tmp/supper_test_file0', 'test0', false); - pg_file_write ---------------- - 5 -(1 row) - -SELECT pg_file_write(current_setting('data_directory') || '/supper_test_file4', 'test4', false); - pg_file_write ---------------- - 5 -(1 row) - -SELECT pg_file_write(current_setting('data_directory') || '/../supper_test_file4', 'test4', false); - pg_file_write ---------------- - 5 -(1 row) - -SELECT pg_file_unlink('../supper_test_file0'); - pg_file_unlink ----------------- - t -(1 row) - -SELECT pg_file_unlink('/tmp/supper_test_file0'); - pg_file_unlink ----------------- - t -(1 row) - -SELECT pg_file_unlink(current_setting('data_directory') || '/supper_test_file4'); - pg_file_unlink ----------------- - t -(1 row) - -SELECT pg_file_unlink(current_setting('data_directory') || '/../supper_test_file4'); - pg_file_unlink ----------------- - t -(1 row) - -RESET ROLE; -REVOKE EXECUTE ON FUNCTION pg_file_write(text,text,bool) FROM regress_superuser1; -REVOKE pg_read_all_settings FROM regress_superuser1; -DROP ROLE regress_superuser1; -======= DROP USER regress_adminpack_user1; ->>>>>>> REL_16_9 -- no further tests for pg_logdir_ls() because it depends on the -- server's logging setup diff --git a/contrib/amcheck/expected/check_btree.out b/contrib/amcheck/expected/check_btree.out index a115ae0de78..7c7fbcdfc7d 100644 --- a/contrib/amcheck/expected/check_btree.out +++ b/contrib/amcheck/expected/check_btree.out @@ -33,6 +33,7 @@ GRANT EXECUTE ON FUNCTION bt_index_check(regclass) TO regress_bttest_role; GRANT EXECUTE ON FUNCTION bt_index_parent_check(regclass) TO regress_bttest_role; GRANT EXECUTE ON FUNCTION bt_index_check(regclass, boolean) TO regress_bttest_role; GRANT EXECUTE ON FUNCTION bt_index_parent_check(regclass, boolean) TO regress_bttest_role; +GRANT CREATE ON SCHEMA public TO regress_bttest_role; SET ROLE regress_bttest_role; SELECT bt_index_check('bttest_a_idx'); bt_index_check diff --git a/contrib/amcheck/sql/check_btree.sql b/contrib/amcheck/sql/check_btree.sql index e2f47fcfbe1..bc2224ea49d 100644 --- a/contrib/amcheck/sql/check_btree.sql +++ b/contrib/amcheck/sql/check_btree.sql @@ -33,6 +33,7 @@ GRANT EXECUTE ON FUNCTION bt_index_check(regclass) TO regress_bttest_role; GRANT EXECUTE ON FUNCTION bt_index_parent_check(regclass) TO regress_bttest_role; GRANT EXECUTE ON FUNCTION bt_index_check(regclass, boolean) TO regress_bttest_role; GRANT EXECUTE ON FUNCTION bt_index_parent_check(regclass, boolean) TO regress_bttest_role; +GRANT CREATE ON SCHEMA public TO regress_bttest_role; SET ROLE regress_bttest_role; SELECT bt_index_check('bttest_a_idx'); SELECT bt_index_parent_check('bttest_a_idx'); diff --git a/contrib/amcheck/t/001_verify_heapam.pl b/contrib/amcheck/t/001_verify_heapam.pl index c189c3dedfa..46d5b53181e 100644 --- a/contrib/amcheck/t/001_verify_heapam.pl +++ b/contrib/amcheck/t/001_verify_heapam.pl @@ -7,11 +7,7 @@ use PostgreSQL::Test::Cluster; use PostgreSQL::Test::Utils; -<<<<<<< HEAD -use Test::More tests => 80; -======= use Test::More; ->>>>>>> REL_16_9 my ($node, $result); diff --git a/contrib/amcheck/t/002_cic.pl b/contrib/amcheck/t/002_cic.pl index 2b766400a12..42a047a3571 100644 --- a/contrib/amcheck/t/002_cic.pl +++ b/contrib/amcheck/t/002_cic.pl @@ -1,43 +1,24 @@ -<<<<<<< HEAD -# Copyright (c) 2021, PostgreSQL Global Development Group -======= # Copyright (c) 2021-2023, PostgreSQL Global Development Group ->>>>>>> REL_16_9 # Test CREATE INDEX CONCURRENTLY with concurrent modifications use strict; use warnings; -<<<<<<< HEAD -use Config; -use PostgresNode; -use TestLib; - -use Test::More tests => 3; -======= use PostgreSQL::Test::Cluster; use PostgreSQL::Test::Utils; use Test::More; ->>>>>>> REL_16_9 my ($node, $result); # # Test set-up # -<<<<<<< HEAD -$node = get_new_node('CIC_test'); -$node->init; -$node->append_conf('postgresql.conf', - 'lock_timeout = ' . (1000 * $TestLib::timeout_default)); -======= $node = PostgreSQL::Test::Cluster->new('CIC_test'); $node->init; $node->append_conf('postgresql.conf', 'lock_timeout = ' . (1000 * $PostgreSQL::Test::Utils::timeout_default)); ->>>>>>> REL_16_9 $node->start; $node->safe_psql('postgres', q(CREATE EXTENSION amcheck)); $node->safe_psql('postgres', q(CREATE TABLE tbl(i int))); diff --git a/contrib/amcheck/t/003_cic_2pc.pl b/contrib/amcheck/t/003_cic_2pc.pl index 1295dcd4cdb..3279a2505a3 100644 --- a/contrib/amcheck/t/003_cic_2pc.pl +++ b/contrib/amcheck/t/003_cic_2pc.pl @@ -1,24 +1,10 @@ -<<<<<<< HEAD -# Copyright (c) 2021, PostgreSQL Global Development Group -======= # Copyright (c) 2021-2023, PostgreSQL Global Development Group ->>>>>>> REL_16_9 # Test CREATE INDEX CONCURRENTLY with concurrent prepared-xact modifications use strict; use warnings; -<<<<<<< HEAD -use Config; -use PostgresNode; -use TestLib; - -use Test::More tests => 5; - -Test::More->builder->todo_start('filesystem bug') - if TestLib::has_wal_read_bug; -======= use PostgreSQL::Test::Cluster; use PostgreSQL::Test::Utils; @@ -26,26 +12,17 @@ Test::More->builder->todo_start('filesystem bug') if PostgreSQL::Test::Utils::has_wal_read_bug; ->>>>>>> REL_16_9 my ($node, $result); # # Test set-up # -<<<<<<< HEAD -$node = get_new_node('CIC_2PC_test'); -$node->init; -$node->append_conf('postgresql.conf', 'max_prepared_transactions = 10'); -$node->append_conf('postgresql.conf', - 'lock_timeout = ' . (1000 * $TestLib::timeout_default)); -======= $node = PostgreSQL::Test::Cluster->new('CIC_2PC_test'); $node->init; $node->append_conf('postgresql.conf', 'max_prepared_transactions = 10'); $node->append_conf('postgresql.conf', 'lock_timeout = ' . (1000 * $PostgreSQL::Test::Utils::timeout_default)); ->>>>>>> REL_16_9 $node->start; $node->safe_psql('postgres', q(CREATE EXTENSION amcheck)); $node->safe_psql('postgres', q(CREATE TABLE tbl(i int))); @@ -59,65 +36,6 @@ # statements. # -<<<<<<< HEAD -my $main_in = ''; -my $main_out = ''; -my $main_timer = IPC::Run::timeout($TestLib::timeout_default); - -my $main_h = - $node->background_psql('postgres', \$main_in, \$main_out, - $main_timer, on_error_stop => 1); -$main_in .= q( -BEGIN; -INSERT INTO tbl VALUES(0); -\echo syncpoint1 -); -pump $main_h until $main_out =~ /syncpoint1/ || $main_timer->is_expired; - -my $cic_in = ''; -my $cic_out = ''; -my $cic_timer = IPC::Run::timeout($TestLib::timeout_default); -my $cic_h = - $node->background_psql('postgres', \$cic_in, \$cic_out, - $cic_timer, on_error_stop => 1); -$cic_in .= q( -\echo start -CREATE INDEX CONCURRENTLY idx ON tbl(i); -); -pump $cic_h until $cic_out =~ /start/ || $cic_timer->is_expired; - -$main_in .= q( -PREPARE TRANSACTION 'a'; -); - -$main_in .= q( -BEGIN; -INSERT INTO tbl VALUES(0); -\echo syncpoint2 -); -pump $main_h until $main_out =~ /syncpoint2/ || $main_timer->is_expired; - -$node->safe_psql('postgres', q(COMMIT PREPARED 'a';)); - -$main_in .= q( -PREPARE TRANSACTION 'b'; -BEGIN; -INSERT INTO tbl VALUES(0); -\echo syncpoint3 -); -pump $main_h until $main_out =~ /syncpoint3/ || $main_timer->is_expired; - -$node->safe_psql('postgres', q(COMMIT PREPARED 'b';)); - -$main_in .= q( -PREPARE TRANSACTION 'c'; -COMMIT PREPARED 'c'; -); -$main_h->pump_nb; - -$main_h->finish; -$cic_h->finish; -======= my $main_h = $node->background_psql('postgres'); $main_h->query_safe( @@ -164,7 +82,6 @@ $main_h->quit; $cic_h->quit; ->>>>>>> REL_16_9 $result = $node->psql('postgres', q(SELECT bt_index_check('idx',true))); is($result, '0', 'bt_index_check after overlapping 2PC'); @@ -185,24 +102,6 @@ )); $node->restart; -<<<<<<< HEAD -my $reindex_in = ''; -my $reindex_out = ''; -my $reindex_timer = - IPC::Run::timeout($TestLib::timeout_default); -my $reindex_h = - $node->background_psql('postgres', \$reindex_in, \$reindex_out, - $reindex_timer, on_error_stop => 1); -$reindex_in .= q( -\echo start -DROP INDEX CONCURRENTLY idx; -CREATE INDEX CONCURRENTLY idx ON tbl(i); -); -pump $reindex_h until $reindex_out =~ /start/ || $reindex_timer->is_expired; - -$node->safe_psql('postgres', "COMMIT PREPARED 'spans_restart'"); -$reindex_h->finish; -======= my $reindex_h = $node->background_psql('postgres'); $reindex_h->query_until( qr/start/, q( @@ -213,7 +112,6 @@ $node->safe_psql('postgres', "COMMIT PREPARED 'spans_restart'"); $reindex_h->quit; ->>>>>>> REL_16_9 $result = $node->psql('postgres', q(SELECT bt_index_check('idx',true))); is($result, '0', 'bt_index_check after 2PC and restart'); diff --git a/contrib/auto_explain/expected/auto_explain.out b/contrib/auto_explain/expected/auto_explain.out index 0560cfb25be..e3a1ac07c1a 100644 --- a/contrib/auto_explain/expected/auto_explain.out +++ b/contrib/auto_explain/expected/auto_explain.out @@ -38,7 +38,6 @@ Query Text: SELECT relname FROM pg_class WHERE relname='pg_class'; Index Only Scan using pg_class_relname_nsp_index on pg_class (cost=0.15..4.17 rows=1 width=64) (actual rows=1 loops=1) Index Cond: (relname = 'pg_class'::name) Heap Fetches: 1 -Optimizer: Postgres-based planner (slice0) Executor memory: 105K bytes. Memory used: 128000kB relname @@ -58,7 +57,6 @@ Finalize Aggregate (cost=35148.64..35148.65 rows=1 width=8) (actual rows=1 loop -> Materialize (cost=0.00..68.06 rows=1001 width=0) (actual rows=1001 loops=340) -> Broadcast Motion 3:3 (slice2; segments: 3) (cost=0.00..53.05 rows=1001 width=0) (actual rows=1001 loops=1) -> Seq Scan on t2 (cost=0.00..13.01 rows=334 width=0) (actual rows=340 loops=1) -Optimizer: Postgres-based planner (slice0) Executor memory: 131K bytes. (slice1) Executor memory: 152K bytes avg x 3 workers, 152K bytes max (seg0). (slice2) Executor memory: 42K bytes avg x 3 workers, 42K bytes max (seg0). @@ -100,7 +98,6 @@ Finalize Aggregate (cost=35148.64..35148.65 rows=1 width=8) (actual rows=1 loop work_mem: 142kB Segments: 3 Max: 48kB (segment 0) Workfile: (0 spilling) -> Broadcast Motion 3:3 (slice2; segments: 3) (cost=0.00..53.05 rows=1001 width=0) (actual rows=1001 loops=1) -> Seq Scan on auto_explain_test.t2 (cost=0.00..13.01 rows=334 width=0) (actual rows=340 loops=1) -Optimizer: Postgres-based planner Settings: enable_nestloop = 'on', optimizer = 'off' (slice0) Executor memory: 131K bytes. (slice1) Executor memory: 152K bytes avg x 3 workers, 152K bytes max (seg0). diff --git a/contrib/auto_explain/t/001_auto_explain.pl b/contrib/auto_explain/t/001_auto_explain.pl index 8e13732aa94..abb422f8de6 100644 --- a/contrib/auto_explain/t/001_auto_explain.pl +++ b/contrib/auto_explain/t/001_auto_explain.pl @@ -4,19 +4,9 @@ use strict; use warnings; -<<<<<<< HEAD -use PostgresNode; -use TestLib; -use Test::More tests => 0 + 1; - -SKIP: -{ - skip "auto_explain is only expected to run on QD, skip test for utility mode", 1; -======= use PostgreSQL::Test::Cluster; use PostgreSQL::Test::Utils; use Test::More; ->>>>>>> REL_16_9 # Runs the specified query and returns the emitted server log. # params is an optional hash mapping GUC names to values; @@ -181,9 +171,6 @@ sub query_log $log_contents, qr/"Node Type": "Index Scan"[^}]*"Index Name": "pg_class_relname_nsp_index"/s, "index scan logged, json mode"); -<<<<<<< HEAD -} -======= # Check that PGC_SUSET parameters can be set by non-superuser if granted, # otherwise not @@ -226,4 +213,3 @@ sub query_log }); done_testing(); ->>>>>>> REL_16_9 diff --git a/contrib/bloom/t/001_wal.pl b/contrib/bloom/t/001_wal.pl index 0a54452bdcf..c1614e9be86 100644 --- a/contrib/bloom/t/001_wal.pl +++ b/contrib/bloom/t/001_wal.pl @@ -4,26 +4,9 @@ # Test generic xlog record work for bloom index replication. use strict; use warnings; -<<<<<<< HEAD -use PostgresNode; -use TestLib; -use Test::More; - -if (TestLib::has_wal_read_bug) -{ - # We'd prefer to use Test::More->builder->todo_start, but the bug causes - # this test file to die(), not merely to fail. - plan skip_all => 'filesystem bug'; -} -else -{ - plan tests => 31; -} -======= use PostgreSQL::Test::Cluster; use PostgreSQL::Test::Utils; use Test::More; ->>>>>>> REL_16_9 my $node_primary; my $node_standby; diff --git a/contrib/btree_gist/expected/bool.out b/contrib/btree_gist/expected/bool.out index 29390f079c0..bd931c66e9a 100644 --- a/contrib/btree_gist/expected/bool.out +++ b/contrib/btree_gist/expected/bool.out @@ -70,9 +70,10 @@ EXPLAIN (COSTS OFF) SELECT * FROM booltmp WHERE a; QUERY PLAN ------------------------------------------ - Index Only Scan using boolidx on booltmp - Index Cond: (a = true) -(2 rows) + Gather Motion 1:1 (slice1; segments: 1) + -> Index Only Scan using boolidx on booltmp + Index Cond: (a = true) +(3 rows) SELECT * FROM booltmp WHERE a; a @@ -84,9 +85,10 @@ EXPLAIN (COSTS OFF) SELECT * FROM booltmp WHERE NOT a; QUERY PLAN ------------------------------------------ - Index Only Scan using boolidx on booltmp - Index Cond: (a = false) -(2 rows) + Gather Motion 1:1 (slice1; segments: 1) + -> Index Only Scan using boolidx on booltmp + Index Cond: (a = false) +(3 rows) SELECT * FROM booltmp WHERE NOT a; a diff --git a/contrib/btree_gist/expected/inet.out b/contrib/btree_gist/expected/inet.out index 6e4a3a67300..7d7366408e5 100644 --- a/contrib/btree_gist/expected/inet.out +++ b/contrib/btree_gist/expected/inet.out @@ -92,7 +92,7 @@ SELECT count(*) FROM inettmp WHERE a = '89.225.196.191'::inet; ---------------------------------------------------------- Aggregate -> Gather Motion 1:1 (slice1; segments: 1) - -> Index Scan using inettmp_a_a1_idx on inettmp + -> Index Only Scan using inettmp_a_a1_idx on inettmp Index Cond: (a = '89.225.196.191'::inet) Optimizer: Postgres query optimizer (5 rows) diff --git a/contrib/file_fdw/expected/.gitignore b/contrib/file_fdw/expected/.gitignore deleted file mode 100644 index 0273f9754f1..00000000000 --- a/contrib/file_fdw/expected/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -/file_fdw.out -/gp_file_fdw.out - -/file_fdw_optimizer.out -/gp_file_fdw_optimizer.out diff --git a/contrib/file_fdw/expected/file_fdw.out b/contrib/file_fdw/expected/file_fdw.out index f5277ebc8b2..ecba3f0671d 100644 --- a/contrib/file_fdw/expected/file_fdw.out +++ b/contrib/file_fdw/expected/file_fdw.out @@ -56,11 +56,7 @@ ERROR: COPY format "xml" not recognized CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', quote ':'); -- ERROR ERROR: COPY quote available only in CSV mode CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'binary', header 'true'); -- ERROR -<<<<<<< HEAD:contrib/file_fdw/output/file_fdw.source -ERROR: COPY cannot specify HEADER in BINARY mode -======= ERROR: cannot specify HEADER in BINARY mode ->>>>>>> REL_16_9:contrib/file_fdw/expected/file_fdw.out CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'binary', quote ':'); -- ERROR ERROR: COPY quote available only in CSV mode CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', delimiter 'a'); -- ERROR @@ -212,13 +208,8 @@ CONTEXT: COPY agg_bad, line 3, column b: "aaa" SELECT explain_filter('EXPLAIN (VERBOSE, COSTS FALSE) SELECT * FROM agg_csv'); Foreign Scan on public.agg_csv Output: a, b -<<<<<<< HEAD:contrib/file_fdw/output/file_fdw.source - Foreign File: @abs_srcdir@/data/agg.csv - Optimizer: Postgres query optimizer - Settings: optimizer=off -======= Foreign File: .../agg.csv ->>>>>>> REL_16_9:contrib/file_fdw/expected/file_fdw.out + Optimizer: Postgres query optimizer \t off PREPARE st(int) AS SELECT * FROM agg_csv WHERE a = $1; @@ -267,20 +258,11 @@ COPY agg_csv FROM STDIN; ERROR: cannot insert into foreign table "agg_csv" -- constraint exclusion tests \t on -<<<<<<< HEAD:contrib/file_fdw/output/file_fdw.source -EXPLAIN (VERBOSE, COSTS FALSE) SELECT * FROM agg_csv WHERE a < 0; +SELECT explain_filter('EXPLAIN (VERBOSE, COSTS FALSE) SELECT * FROM agg_csv WHERE a < 0'); Result Output: a, b One-Time Filter: false Optimizer: Postgres query optimizer - Settings: optimizer=off -======= -SELECT explain_filter('EXPLAIN (VERBOSE, COSTS FALSE) SELECT * FROM agg_csv WHERE a < 0'); - Foreign Scan on public.agg_csv - Output: a, b - Filter: (agg_csv.a < 0) - Foreign File: .../agg.csv ->>>>>>> REL_16_9:contrib/file_fdw/expected/file_fdw.out \t off SELECT * FROM agg_csv WHERE a < 0; @@ -489,13 +471,8 @@ SELECT explain_filter('EXPLAIN (VERBOSE, COSTS FALSE) SELECT * FROM agg_text WHE Foreign Scan on public.agg_text Output: a, b Filter: (agg_text.a > 0) -<<<<<<< HEAD:contrib/file_fdw/output/file_fdw.source - Foreign File: @abs_srcdir@/data/agg.data - Optimizer: Postgres query optimizer - Settings: optimizer=off -======= Foreign File: .../agg.data ->>>>>>> REL_16_9:contrib/file_fdw/expected/file_fdw.out + Optimizer: Postgres query optimizer \t off -- file FDW allows foreign tables to be accessed without user mapping diff --git a/contrib/file_fdw/expected/file_fdw_optimizer.source b/contrib/file_fdw/expected/file_fdw_optimizer.out similarity index 99% rename from contrib/file_fdw/expected/file_fdw_optimizer.source rename to contrib/file_fdw/expected/file_fdw_optimizer.out index e2349f7876b..1cbf51cdbe5 100644 --- a/contrib/file_fdw/expected/file_fdw_optimizer.source +++ b/contrib/file_fdw/expected/file_fdw_optimizer.out @@ -1,6 +1,8 @@ -- -- Test foreign-data wrapper file_fdw. -- +-- directory paths are passed to us in environment variables +\getenv abs_srcdir PG_ABS_SRCDIR -- Clean up in case a prior regression run failed SET client_min_messages TO 'warning'; SET optimizer_trace_fallback = on; diff --git a/contrib/file_fdw/expected/gp_file_fdw.source b/contrib/file_fdw/expected/gp_file_fdw.out similarity index 91% rename from contrib/file_fdw/expected/gp_file_fdw.source rename to contrib/file_fdw/expected/gp_file_fdw.out index b712377fb3f..574d49e8f9c 100644 --- a/contrib/file_fdw/expected/gp_file_fdw.source +++ b/contrib/file_fdw/expected/gp_file_fdw.out @@ -1,6 +1,8 @@ -- -- Test foreign-data wrapper file_fdw. Apache Cloudberry MPP specific -- +-- directory paths are passed to us in environment variables +\getenv abs_srcdir PG_ABS_SRCDIR -- Clean up in case a prior regression run failed SET client_min_messages TO 'error'; SET optimizer_trace_fallback = on; @@ -19,16 +21,18 @@ ERROR: invalid option "mpp_execute" HINT: There are no valid options in this context. CREATE USER MAPPING FOR file_fdw_superuser SERVER file_server; -- MPP tests +\set filename :abs_srcdir '/data/text.csv' CREATE FOREIGN TABLE text_csv_any ( word1 text, word2 text ) SERVER file_server -OPTIONS (format 'csv', filename '@abs_srcdir@/data/text.csv', mpp_execute 'any'); +OPTIONS (format 'csv', filename :'filename', mpp_execute 'any'); SELECT * FROM text_csv_any; ERROR: file_fdw does not support mpp_execute option 'any' +\set filename_segid :abs_srcdir '/data/text.csv' CREATE FOREIGN TABLE text_csv_all ( word1 text, word2 text ) SERVER file_server -OPTIONS (format 'csv', filename '@abs_srcdir@/data/text.csv', mpp_execute 'all segments'); +OPTIONS (format 'csv', filename :'filename_segid', mpp_execute 'all segments'); EXPLAIN SELECT * FROM text_csv_all ORDER BY word1; QUERY PLAN ------------------------------------------------------------------------------------------------ @@ -49,16 +53,18 @@ SELECT * FROM text_csv_all ORDER BY word1; FOO | bar (3 rows) +\set filename :abs_srcdir '/data/text.csv' CREATE FOREIGN TABLE text_csv_any_from_server ( word1 text, word2 text ) SERVER file_server -OPTIONS (format 'csv', filename '@abs_srcdir@/data/text.csv'); +OPTIONS (format 'csv', filename :'filename'); SELECT * FROM text_csv_any_from_server; ERROR: file_fdw does not support mpp_execute option 'any' +\set filename :abs_srcdir '/data/text.csv' CREATE FOREIGN TABLE text_csv_coordinator ( word1 text, word2 text, a int, b int ) SERVER file_server -OPTIONS (format 'csv', filename '@abs_srcdir@/data/text.csv', mpp_execute 'coordinator'); +OPTIONS (format 'csv', filename :'filename', mpp_execute 'coordinator'); -- Test append works both ways and generates valid plans. Should be able to execute -- coordinator fdw on coordinator under redistribute explain select word1 from text_csv_coordinator union all select word1 from text_csv_all; diff --git a/contrib/file_fdw/expected/gp_file_fdw_optimizer.source b/contrib/file_fdw/expected/gp_file_fdw_optimizer.out similarity index 100% rename from contrib/file_fdw/expected/gp_file_fdw_optimizer.source rename to contrib/file_fdw/expected/gp_file_fdw_optimizer.out diff --git a/contrib/file_fdw/sql/.gitignore b/contrib/file_fdw/sql/.gitignore deleted file mode 100644 index ca2b46d302c..00000000000 --- a/contrib/file_fdw/sql/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/file_fdw.sql -/gp_file_fdw.sql diff --git a/contrib/file_fdw/sql/gp_file_fdw.source b/contrib/file_fdw/sql/gp_file_fdw.sql similarity index 80% rename from contrib/file_fdw/sql/gp_file_fdw.source rename to contrib/file_fdw/sql/gp_file_fdw.sql index b4a2c198b7f..9da7e4969d8 100644 --- a/contrib/file_fdw/sql/gp_file_fdw.source +++ b/contrib/file_fdw/sql/gp_file_fdw.sql @@ -2,6 +2,9 @@ -- Test foreign-data wrapper file_fdw. Apache Cloudberry MPP specific -- +-- directory paths are passed to us in environment variables +\getenv abs_srcdir PG_ABS_SRCDIR + -- Clean up in case a prior regression run failed SET client_min_messages TO 'error'; SET optimizer_trace_fallback = on; @@ -23,26 +26,33 @@ CREATE USER MAPPING FOR file_fdw_superuser SERVER file_server OPTIONS (mpp_execu CREATE USER MAPPING FOR file_fdw_superuser SERVER file_server; -- MPP tests +\set filename :abs_srcdir '/data/text.csv' CREATE FOREIGN TABLE text_csv_any ( word1 text, word2 text ) SERVER file_server -OPTIONS (format 'csv', filename '@abs_srcdir@/data/text.csv', mpp_execute 'any'); +OPTIONS (format 'csv', filename :'filename', mpp_execute 'any'); SELECT * FROM text_csv_any; + +\set filename_segid :abs_srcdir '/data/text.csv' CREATE FOREIGN TABLE text_csv_all ( word1 text, word2 text ) SERVER file_server -OPTIONS (format 'csv', filename '@abs_srcdir@/data/text.csv', mpp_execute 'all segments'); +OPTIONS (format 'csv', filename :'filename_segid', mpp_execute 'all segments'); EXPLAIN SELECT * FROM text_csv_all ORDER BY word1; SELECT * FROM text_csv_all ORDER BY word1; + +\set filename :abs_srcdir '/data/text.csv' CREATE FOREIGN TABLE text_csv_any_from_server ( word1 text, word2 text ) SERVER file_server -OPTIONS (format 'csv', filename '@abs_srcdir@/data/text.csv'); +OPTIONS (format 'csv', filename :'filename'); SELECT * FROM text_csv_any_from_server; + +\set filename :abs_srcdir '/data/text.csv' CREATE FOREIGN TABLE text_csv_coordinator ( word1 text, word2 text, a int, b int ) SERVER file_server -OPTIONS (format 'csv', filename '@abs_srcdir@/data/text.csv', mpp_execute 'coordinator'); +OPTIONS (format 'csv', filename :'filename', mpp_execute 'coordinator'); -- Test append works both ways and generates valid plans. Should be able to execute -- coordinator fdw on coordinator under redistribute diff --git a/contrib/intarray/expected/_int.out b/contrib/intarray/expected/_int.out index 712004112fe..30e642765a6 100644 --- a/contrib/intarray/expected/_int.out +++ b/contrib/intarray/expected/_int.out @@ -933,6 +933,8 @@ CREATE TABLE more__int AS SELECT from unnest(a) u where u < 2000000000) END AS a, a as b FROM test__int; +HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. +NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column(s) named 'b' as the Apache Cloudberry data distribution key for this table. CREATE INDEX ON more__int using gist (a gist__int_ops(numranges = 252)); SELECT count(*) from more__int WHERE a && '{23,50}'; count diff --git a/contrib/pageinspect/expected/btree.out b/contrib/pageinspect/expected/btree.out index 6fa16930dff..fde12ec6bb8 100644 --- a/contrib/pageinspect/expected/btree.out +++ b/contrib/pageinspect/expected/btree.out @@ -1,10 +1,7 @@ -<<<<<<< HEAD -- start_matchsubs -- m/ERROR: block number out of range.*/ -- s/ERROR: block number out of range.*/ERROR: block number out of range/ -- end_matchsubs -======= ->>>>>>> REL_16_9 CREATE TABLE test1 (a int8, b int4range); INSERT INTO test1 VALUES (72057594037927937, '[0,1)'); CREATE INDEX test1_a_idx ON test1 USING btree (a); diff --git a/contrib/pageinspect/expected/gist.out b/contrib/pageinspect/expected/gist.out index 4d6351b4966..d1adbab8ae2 100644 --- a/contrib/pageinspect/expected/gist.out +++ b/contrib/pageinspect/expected/gist.out @@ -31,13 +31,6 @@ SELECT * FROM gist_page_opaque_info(get_raw_page('test_gist_idx', 2)); COMMIT; SELECT * FROM gist_page_items(get_raw_page('test_gist_idx', 0), 'test_gist_idx'); -<<<<<<< HEAD - itemoffset | ctid | itemlen | dead | keys -------------+-----------+---------+------+------------------- - 1 | (1,65535) | 40 | f | (p)=((669,669)) - 2 | (2,65535) | 40 | f | (p)=((1000,1000)) -(2 rows) -======= itemoffset | ctid | itemlen | dead | keys ------------+-----------+---------+------+------------------------------- 1 | (1,65535) | 40 | f | (p)=("(185,185),(1,1)") @@ -47,7 +40,6 @@ SELECT * FROM gist_page_items(get_raw_page('test_gist_idx', 0), 'test_gist_idx') 5 | (5,65535) | 40 | f | (p)=("(870,870),(741,741)") 6 | (6,65535) | 40 | f | (p)=("(1000,1000),(871,871)") (6 rows) ->>>>>>> REL_16_9 SELECT * FROM gist_page_items(get_raw_page('test_gist_idx', 1), 'test_gist_idx') LIMIT 5; itemoffset | ctid | itemlen | dead | keys @@ -66,18 +58,6 @@ SELECT itemoffset, ctid, itemlen FROM gist_page_items_bytea(get_raw_page('test_g ------------+-----------+--------- 1 | (1,65535) | 40 2 | (2,65535) | 40 -<<<<<<< HEAD -(2 rows) - --- Failure with non-GiST index. -CREATE INDEX test_gist_btree on test_gist(t); -SELECT gist_page_items(get_raw_page('test_gist_btree', 0), 'test_gist_btree'); -ERROR: "test_gist_btree" is not a GiST index --- Failure with various modes. --- Suppress the DETAIL message, to allow the tests to work across various --- page sizes and architectures. -\set VERBOSITY terse -======= 3 | (3,65535) | 40 4 | (4,65535) | 40 5 | (5,65535) | 40 @@ -94,7 +74,6 @@ ERROR: "test_gist_btree" is not a GiST index SELECT gist_page_items(get_raw_page('test_gist_btree', 0), 'test_gist_idx'); ERROR: input page is not a valid GiST page -- Failure with various modes. ->>>>>>> REL_16_9 -- invalid page size SELECT gist_page_items_bytea('aaa'::bytea); ERROR: invalid page size @@ -127,8 +106,6 @@ SELECT gist_page_opaque_info(decode(repeat('00', :block_size), 'hex')); ----------------------- (1 row) -<<<<<<< HEAD -======= -- Test gist_page_items with included columns. -- Non-leaf pages contain only the key attributes, and leaf pages contain @@ -152,6 +129,5 @@ SELECT keys AS keys_leaf_1 ------------------------------------------------------ (p) INCLUDE (t, i)=("(1,1),(1,1)") INCLUDE (1, null) (1 row) ->>>>>>> REL_16_9 DROP TABLE test_gist; diff --git a/contrib/pageinspect/expected/page.out b/contrib/pageinspect/expected/page.out index 93d7e7d84e4..24f7c257166 100644 --- a/contrib/pageinspect/expected/page.out +++ b/contrib/pageinspect/expected/page.out @@ -241,8 +241,6 @@ SELECT page_checksum(decode(repeat('00', :block_size), 'hex'), 1); (1 row) -<<<<<<< HEAD -======= -- tests for sequences create sequence test_sequence start 72057594037927937; select tuple_data_split('test_sequence'::regclass, t_data, t_infomask, t_infomask2, t_bits) @@ -253,4 +251,3 @@ select tuple_data_split('test_sequence'::regclass, t_data, t_infomask, t_infomas (1 row) drop sequence test_sequence; ->>>>>>> REL_16_9 diff --git a/contrib/pageinspect/sql/brin.sql b/contrib/pageinspect/sql/brin.sql index 540c3a83fc6..96b4645187e 100644 --- a/contrib/pageinspect/sql/brin.sql +++ b/contrib/pageinspect/sql/brin.sql @@ -15,14 +15,6 @@ SELECT * FROM brin_revmap_data(get_raw_page('test1_a_idx', 1)) LIMIT 5; SELECT * FROM brin_page_items(get_raw_page('test1_a_idx', 2), 'test1_a_idx') ORDER BY blknum, attnum LIMIT 5; -<<<<<<< HEAD --- Failure for non-BRIN index. -CREATE INDEX test1_a_btree ON test1 (a); -SELECT brin_page_items(get_raw_page('test1_a_btree', 0), 'test1_a_btree'); - --- Mask DETAIL messages as these are not portable across architectures. -\set VERBOSITY terse -======= -- Mask DETAIL messages as these are not portable across architectures. \set VERBOSITY terse @@ -31,7 +23,6 @@ CREATE INDEX test1_a_btree ON test1 (a); SELECT brin_page_items(get_raw_page('test1_a_btree', 0), 'test1_a_btree'); SELECT brin_page_items(get_raw_page('test1_a_btree', 0), 'test1_a_idx'); ->>>>>>> REL_16_9 -- Invalid special area size SELECT brin_page_type(get_raw_page('test1', 0)); SELECT * FROM brin_metapage_info(get_raw_page('test1', 0)); diff --git a/contrib/pageinspect/sql/btree.sql b/contrib/pageinspect/sql/btree.sql index 712fe387a68..aeeac0c35c3 100644 --- a/contrib/pageinspect/sql/btree.sql +++ b/contrib/pageinspect/sql/btree.sql @@ -1,10 +1,7 @@ -<<<<<<< HEAD -- start_matchsubs -- m/ERROR: block number out of range.*/ -- s/ERROR: block number out of range.*/ERROR: block number out of range/ -- end_matchsubs -======= ->>>>>>> REL_16_9 CREATE TABLE test1 (a int8, b int4range); INSERT INTO test1 VALUES (72057594037927937, '[0,1)'); CREATE INDEX test1_a_idx ON test1 USING btree (a); diff --git a/contrib/pageinspect/sql/gist.sql b/contrib/pageinspect/sql/gist.sql index 3598e550595..d263542ba15 100644 --- a/contrib/pageinspect/sql/gist.sql +++ b/contrib/pageinspect/sql/gist.sql @@ -26,16 +26,6 @@ SELECT * FROM gist_page_items(get_raw_page('test_gist_idx', 1), 'test_gist_idx') -- platform-dependent (endianness), so omit the actual key data from the output. SELECT itemoffset, ctid, itemlen FROM gist_page_items_bytea(get_raw_page('test_gist_idx', 0)); -<<<<<<< HEAD --- Failure with non-GiST index. -CREATE INDEX test_gist_btree on test_gist(t); -SELECT gist_page_items(get_raw_page('test_gist_btree', 0), 'test_gist_btree'); - --- Failure with various modes. --- Suppress the DETAIL message, to allow the tests to work across various --- page sizes and architectures. -\set VERBOSITY terse -======= -- Suppress the DETAIL message, to allow the tests to work across various -- page sizes and architectures. \set VERBOSITY terse @@ -46,7 +36,6 @@ SELECT gist_page_items(get_raw_page('test_gist_btree', 0), 'test_gist_btree'); SELECT gist_page_items(get_raw_page('test_gist_btree', 0), 'test_gist_idx'); -- Failure with various modes. ->>>>>>> REL_16_9 -- invalid page size SELECT gist_page_items_bytea('aaa'::bytea); SELECT gist_page_items('aaa'::bytea, 'test_gist_idx'::regclass); @@ -63,8 +52,6 @@ SELECT gist_page_items_bytea(decode(repeat('00', :block_size), 'hex')); SELECT gist_page_items(decode(repeat('00', :block_size), 'hex'), 'test_gist_idx'::regclass); SELECT gist_page_opaque_info(decode(repeat('00', :block_size), 'hex')); -<<<<<<< HEAD -======= -- Test gist_page_items with included columns. -- Non-leaf pages contain only the key attributes, and leaf pages contain -- the included attributes. @@ -79,5 +66,4 @@ SELECT keys AS keys_leaf_1 FROM gist_page_items(get_raw_page('test_gist_idx_inc', 1), 'test_gist_idx_inc') WHERE itemoffset = 1; ->>>>>>> REL_16_9 DROP TABLE test_gist; diff --git a/contrib/pageinspect/sql/page.sql b/contrib/pageinspect/sql/page.sql index e9e901bc91a..346e4ee142c 100644 --- a/contrib/pageinspect/sql/page.sql +++ b/contrib/pageinspect/sql/page.sql @@ -98,12 +98,9 @@ SHOW block_size \gset SELECT fsm_page_contents(decode(repeat('00', :block_size), 'hex')); SELECT page_header(decode(repeat('00', :block_size), 'hex')); SELECT page_checksum(decode(repeat('00', :block_size), 'hex'), 1); -<<<<<<< HEAD -======= -- tests for sequences create sequence test_sequence start 72057594037927937; select tuple_data_split('test_sequence'::regclass, t_data, t_infomask, t_infomask2, t_bits) from heap_page_items(get_raw_page('test_sequence', 0)); drop sequence test_sequence; ->>>>>>> REL_16_9 diff --git a/contrib/passwordcheck/expected/passwordcheck.out b/contrib/passwordcheck/expected/passwordcheck.out index cbaac017582..3b72c1ffb00 100644 --- a/contrib/passwordcheck/expected/passwordcheck.out +++ b/contrib/passwordcheck/expected/passwordcheck.out @@ -1,10 +1,6 @@ LOAD 'passwordcheck'; -<<<<<<< HEAD -CREATE USER regress_user1; -NOTICE: resource queue required -- using default resource queue "pg_default" -======= CREATE USER regress_passwordcheck_user1; ->>>>>>> REL_16_9 +NOTICE: resource queue required -- using default resource queue "pg_default" -- ok ALTER USER regress_passwordcheck_user1 PASSWORD 'a_nice_long_password'; -- error: too short diff --git a/contrib/pg_freespacemap/.gitignore b/contrib/pg_freespacemap/.gitignore index abc19c32a3f..0f244a2217e 100644 --- a/contrib/pg_freespacemap/.gitignore +++ b/contrib/pg_freespacemap/.gitignore @@ -1,8 +1,5 @@ -<<<<<<< HEAD /pg_freespacemap.sql -======= # Generated subdirectories /log/ /results/ /tmp_check/ ->>>>>>> REL_16_9 diff --git a/contrib/pg_stat_statements/pg_stat_statements.c b/contrib/pg_stat_statements/pg_stat_statements.c index f88baf0b019..20248f016bc 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.c +++ b/contrib/pg_stat_statements/pg_stat_statements.c @@ -56,7 +56,6 @@ #include "jit/jit.h" #include "mb/pg_wchar.h" #include "miscadmin.h" -#include "nodes/queryjumble.h" #include "optimizer/planner.h" #include "parser/analyze.h" #include "parser/parsetree.h" diff --git a/contrib/pg_trgm/expected/pg_trgm.out b/contrib/pg_trgm/expected/pg_trgm.out index 6fd1903a07a..31f3a43a22e 100644 --- a/contrib/pg_trgm/expected/pg_trgm.out +++ b/contrib/pg_trgm/expected/pg_trgm.out @@ -5416,29 +5416,16 @@ SELECT similarity('Szczecin', 'Warsaw'); EXPLAIN (COSTS OFF) SELECT DISTINCT city, similarity(city, 'Warsaw'), show_limit() FROM restaurants WHERE city % 'Warsaw'; -<<<<<<< HEAD - QUERY PLAN ------------------------------------------------------------------------- + QUERY PLAN +------------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) -> HashAggregate - Group Key: city, similarity(city, 'Warsaw'::text), '0.3'::real + Group Key: city, similarity(city, 'Warsaw'::text) -> Bitmap Heap Scan on restaurants Recheck Cond: (city % 'Warsaw'::text) -> Bitmap Index Scan on restaurants_city_idx Index Cond: (city % 'Warsaw'::text) - Optimizer: Postgres query optimizer (8 rows) -======= - QUERY PLAN -------------------------------------------------------- - HashAggregate - Group Key: city, similarity(city, 'Warsaw'::text) - -> Bitmap Heap Scan on restaurants - Recheck Cond: (city % 'Warsaw'::text) - -> Bitmap Index Scan on restaurants_city_idx - Index Cond: (city % 'Warsaw'::text) -(6 rows) ->>>>>>> REL_16_9 SELECT set_limit(0.3); set_limit diff --git a/contrib/pgcrypto/expected/blowfish_1.out b/contrib/pgcrypto/expected/blowfish_1.out index 422764db26d..e52abf1d299 100644 --- a/contrib/pgcrypto/expected/blowfish_1.out +++ b/contrib/pgcrypto/expected/blowfish_1.out @@ -1,100 +1,6 @@ -- -- Blowfish cipher -- -<<<<<<< HEAD --- ensure consistent test output regardless of the default bytea format -SET bytea_output TO escape; --- some standard Blowfish testvalues -SELECT encode(encrypt( -decode('0000000000000000', 'hex'), -decode('0000000000000000', 'hex'), -'bf-ecb/pad:none'), 'hex'); -ERROR: encrypt error: Cipher cannot be initialized ? -SELECT encode(encrypt( -decode('ffffffffffffffff', 'hex'), -decode('ffffffffffffffff', 'hex'), -'bf-ecb/pad:none'), 'hex'); -ERROR: encrypt error: Cipher cannot be initialized ? -SELECT encode(encrypt( -decode('1000000000000001', 'hex'), -decode('3000000000000000', 'hex'), -'bf-ecb/pad:none'), 'hex'); -ERROR: encrypt error: Cipher cannot be initialized ? -SELECT encode(encrypt( -decode('1111111111111111', 'hex'), -decode('1111111111111111', 'hex'), -'bf-ecb/pad:none'), 'hex'); -ERROR: encrypt error: Cipher cannot be initialized ? -SELECT encode(encrypt( -decode('0123456789abcdef', 'hex'), -decode('fedcba9876543210', 'hex'), -'bf-ecb/pad:none'), 'hex'); -ERROR: encrypt error: Cipher cannot be initialized ? -SELECT encode(encrypt( -decode('01a1d6d039776742', 'hex'), -decode('fedcba9876543210', 'hex'), -'bf-ecb/pad:none'), 'hex'); -ERROR: encrypt error: Cipher cannot be initialized ? -SELECT encode(encrypt( -decode('ffffffffffffffff', 'hex'), -decode('0000000000000000', 'hex'), -'bf-ecb/pad:none'), 'hex'); -ERROR: encrypt error: Cipher cannot be initialized ? --- setkey -SELECT encode(encrypt( -decode('fedcba9876543210', 'hex'), -decode('f0e1d2c3b4a5968778695a4b3c2d1e0f', 'hex'), -'bf-ecb/pad:none'), 'hex'); -ERROR: encrypt error: Cipher cannot be initialized ? --- with padding -SELECT encode(encrypt( -decode('01234567890123456789', 'hex'), -decode('33443344334433443344334433443344', 'hex'), -'bf-ecb'), 'hex'); -ERROR: encrypt error: Cipher cannot be initialized ? --- cbc --- 28 bytes key -SELECT encode(encrypt( -decode('6b77b4d63006dee605b156e27403979358deb9e7154616d959f1652bd5', 'hex'), -decode('37363534333231204e6f77206973207468652074696d6520666f7220', 'hex'), -'bf-cbc'), 'hex'); -ERROR: encrypt error: Key was too big --- 29 bytes key -SELECT encode(encrypt( -decode('6b77b4d63006dee605b156e27403979358deb9e7154616d959f1652bd5ff92cc', 'hex'), -decode('37363534333231204e6f77206973207468652074696d6520666f722000', 'hex'), -'bf-cbc'), 'hex'); -ERROR: encrypt error: Key was too big --- blowfish-448 -SELECT encode(encrypt( -decode('fedcba9876543210', 'hex'), -decode('f0e1d2c3b4a5968778695a4b3c2d1e0f001122334455667704689104c2fd3b2f584023641aba61761f1f1f1f0e0e0e0effffffffffffffff', 'hex'), -'bf-ecb/pad:none'), 'hex'); -ERROR: encrypt error: Key was too big --- result: c04504012e4e1f53 --- empty data -select encode(encrypt('', 'foo', 'bf'), 'hex'); -ERROR: encrypt error: Cipher cannot be initialized ? --- 10 bytes key -select encode(encrypt('foo', '0123456789', 'bf'), 'hex'); -ERROR: encrypt error: Cipher cannot be initialized ? --- 22 bytes key -select encode(encrypt('foo', '0123456789012345678901', 'bf'), 'hex'); -ERROR: encrypt error: Key was too big --- decrypt -select decrypt(encrypt('foo', '0123456', 'bf'), '0123456', 'bf'); -ERROR: encrypt error: Cipher cannot be initialized ? --- iv -select encode(encrypt_iv('foo', '0123456', 'abcd', 'bf'), 'hex'); -ERROR: encrypt_iv error: Cipher cannot be initialized ? -select decrypt_iv(decode('95c7e89322525d59', 'hex'), '0123456', 'abcd', 'bf'); -ERROR: decrypt_iv error: Cipher cannot be initialized ? --- long message -select encode(encrypt('Lets try a longer message.', '0123456789', 'bf'), 'hex'); -ERROR: encrypt error: Cipher cannot be initialized ? -select decrypt(encrypt('Lets try a longer message.', '0123456789', 'bf'), '0123456789', 'bf'); -ERROR: encrypt error: Cipher cannot be initialized ? -======= -- some standard Blowfish testvalues SELECT encrypt('\x0000000000000000', '\x0000000000000000', 'bf-ecb/pad:none'); ERROR: encrypt error: Cipher cannot be initialized @@ -154,4 +60,3 @@ select encrypt('Lets try a longer message.', '0123456789', 'bf'); ERROR: encrypt error: Cipher cannot be initialized select encode(decrypt(encrypt('Lets try a longer message.', '0123456789', 'bf'), '0123456789', 'bf'), 'escape'); ERROR: encrypt error: Cipher cannot be initialized ->>>>>>> REL_16_9 diff --git a/contrib/pgcrypto/expected/cast5_1.out b/contrib/pgcrypto/expected/cast5_1.out index 92d654019ef..175e0b0366b 100644 --- a/contrib/pgcrypto/expected/cast5_1.out +++ b/contrib/pgcrypto/expected/cast5_1.out @@ -1,53 +1,6 @@ -- -- Cast5 cipher -- -<<<<<<< HEAD --- ensure consistent test output regardless of the default bytea format -SET bytea_output TO escape; --- test vectors from RFC2144 --- 128 bit key -SELECT encode(encrypt( -decode('01 23 45 67 89 AB CD EF', 'hex'), -decode('01 23 45 67 12 34 56 78 23 45 67 89 34 56 78 9A', 'hex'), -'cast5-ecb/pad:none'), 'hex'); -ERROR: encrypt error: Cipher cannot be initialized ? --- result: 23 8B 4F E5 84 7E 44 B2 --- 80 bit key -SELECT encode(encrypt( -decode('01 23 45 67 89 AB CD EF', 'hex'), -decode('01 23 45 67 12 34 56 78 23 45', 'hex'), -'cast5-ecb/pad:none'), 'hex'); -ERROR: encrypt error: Cipher cannot be initialized ? --- result: EB 6A 71 1A 2C 02 27 1B --- 40 bit key -SELECT encode(encrypt( -decode('01 23 45 67 89 AB CD EF', 'hex'), -decode('01 23 45 67 12', 'hex'), -'cast5-ecb/pad:none'), 'hex'); -ERROR: encrypt error: Cipher cannot be initialized ? --- result: 7A C8 16 D1 6E 9B 30 2E --- cbc --- empty data -select encode( encrypt('', 'foo', 'cast5'), 'hex'); -ERROR: encrypt error: Cipher cannot be initialized ? --- 10 bytes key -select encode( encrypt('foo', '0123456789', 'cast5'), 'hex'); -ERROR: encrypt error: Cipher cannot be initialized ? --- decrypt -select decrypt(encrypt('foo', '0123456', 'cast5'), '0123456', 'cast5'); -ERROR: encrypt error: Cipher cannot be initialized ? --- iv -select encode(encrypt_iv('foo', '0123456', 'abcd', 'cast5'), 'hex'); -ERROR: encrypt_iv error: Cipher cannot be initialized ? -select decrypt_iv(decode('384a970695ce016a', 'hex'), - '0123456', 'abcd', 'cast5'); -ERROR: decrypt_iv error: Cipher cannot be initialized ? --- long message -select encode(encrypt('Lets try a longer message.', '0123456789', 'cast5'), 'hex'); -ERROR: encrypt error: Cipher cannot be initialized ? -select decrypt(encrypt('Lets try a longer message.', '0123456789', 'cast5'), '0123456789', 'cast5'); -ERROR: encrypt error: Cipher cannot be initialized ? -======= -- test vectors from RFC2144 -- 128 bit key SELECT encrypt('\x0123456789ABCDEF', '\x0123456712345678234567893456789A', 'cast5-ecb/pad:none'); @@ -78,4 +31,3 @@ select encrypt('Lets try a longer message.', '0123456789', 'cast5'); ERROR: encrypt error: Cipher cannot be initialized select encode(decrypt(encrypt('Lets try a longer message.', '0123456789', 'cast5'), '0123456789', 'cast5'), 'escape'); ERROR: encrypt error: Cipher cannot be initialized ->>>>>>> REL_16_9 diff --git a/contrib/pgcrypto/expected/des_1.out b/contrib/pgcrypto/expected/des_1.out index b9a3091c1af..5a76154ee2b 100644 --- a/contrib/pgcrypto/expected/des_1.out +++ b/contrib/pgcrypto/expected/des_1.out @@ -1,36 +1,6 @@ -- -- DES cipher -- -<<<<<<< HEAD --- ensure consistent test output regardless of the default bytea format -SET bytea_output TO escape; --- no official test vectors atm --- from blowfish.sql -SELECT encode(encrypt( -decode('0123456789abcdef', 'hex'), -decode('fedcba9876543210', 'hex'), -'des-ecb/pad:none'), 'hex'); -ERROR: encrypt error: Cipher cannot be initialized ? --- empty data -select encode( encrypt('', 'foo', 'des'), 'hex'); -ERROR: encrypt error: Cipher cannot be initialized ? --- 8 bytes key -select encode( encrypt('foo', '01234589', 'des'), 'hex'); -ERROR: encrypt error: Cipher cannot be initialized ? --- decrypt -select decrypt(encrypt('foo', '0123456', 'des'), '0123456', 'des'); -ERROR: encrypt error: Cipher cannot be initialized ? --- iv -select encode(encrypt_iv('foo', '0123456', 'abcd', 'des'), 'hex'); -ERROR: encrypt_iv error: Cipher cannot be initialized ? -select decrypt_iv(decode('50735067b073bb93', 'hex'), '0123456', 'abcd', 'des'); -ERROR: decrypt_iv error: Cipher cannot be initialized ? --- long message -select encode(encrypt('Lets try a longer message.', '01234567', 'des'), 'hex'); -ERROR: encrypt error: Cipher cannot be initialized ? -select decrypt(encrypt('Lets try a longer message.', '01234567', 'des'), '01234567', 'des'); -ERROR: encrypt error: Cipher cannot be initialized ? -======= -- no official test vectors atm -- from blowfish.sql SELECT encrypt('\x0123456789abcdef', '\xfedcba9876543210', 'des-ecb/pad:none'); @@ -54,4 +24,3 @@ select encrypt('Lets try a longer message.', '01234567', 'des'); ERROR: encrypt error: Cipher cannot be initialized select encode(decrypt(encrypt('Lets try a longer message.', '01234567', 'des'), '01234567', 'des'), 'escape'); ERROR: encrypt error: Cipher cannot be initialized ->>>>>>> REL_16_9 diff --git a/contrib/pgcrypto/expected/pgp-decrypt_1.out b/contrib/pgcrypto/expected/pgp-decrypt_1.out index 917f9ed4cad..80a4c48613d 100644 --- a/contrib/pgcrypto/expected/pgp-decrypt_1.out +++ b/contrib/pgcrypto/expected/pgp-decrypt_1.out @@ -283,11 +283,7 @@ FwsDabdQUz5O7bgNSnxfmyw1OifGF+W2bIn/8W+0rDf8u3+O+Q== (1 row) -- Checking various data -<<<<<<< HEAD -select encode(digest(pgp_sym_decrypt(dearmor(' -======= select digest(pgp_sym_decrypt(dearmor(' ->>>>>>> REL_16_9 -----BEGIN PGP MESSAGE----- Comment: dat1.aes.sha1.mdc.s2k3.z0 @@ -295,16 +291,6 @@ jA0EBwMCGJ+SpuOysINg0kQBJfSjzsW0x4OVcAyr17O7FBvMTwIGeGcJd99oTQU8 Xtx3kDqnhUq9Z1fS3qPbi5iNP2A9NxOBxPWz2JzxhydANlgbxg== =W/ik -----END PGP MESSAGE----- -<<<<<<< HEAD -'), '0123456789abcdefghij'), 'sha1'), 'hex'); - encode ------------------------------------------- - 0225e3ede6f2587b076d021a189ff60aad67e066 -(1 row) - --- expected: 0225e3ede6f2587b076d021a189ff60aad67e066 -select encode(digest(pgp_sym_decrypt(dearmor(' -======= '), '0123456789abcdefghij'), 'sha1'); digest -------------------------------------------- @@ -312,7 +298,6 @@ select encode(digest(pgp_sym_decrypt(dearmor(' (1 row) select digest(pgp_sym_decrypt(dearmor(' ->>>>>>> REL_16_9 -----BEGIN PGP MESSAGE----- Comment: dat2.aes.sha1.mdc.s2k3.z0 @@ -320,16 +305,6 @@ jA0EBwMCvdpDvidNzMxg0jUBvj8eS2+1t/9/zgemxvhtc0fvdKGGbjH7dleaTJRB SaV9L04ky1qECNDx3XjnoKLC+H7IOQ== =Fxen -----END PGP MESSAGE----- -<<<<<<< HEAD -'), '0123456789abcdefghij'), 'sha1'), 'hex'); - encode ------------------------------------------- - da39a3ee5e6b4b0d3255bfef95601890afd80709 -(1 row) - --- expected: da39a3ee5e6b4b0d3255bfef95601890afd80709 -select encode(digest(pgp_sym_decrypt(dearmor(' -======= '), '0123456789abcdefghij'), 'sha1'); digest -------------------------------------------- @@ -337,7 +312,6 @@ select encode(digest(pgp_sym_decrypt(dearmor(' (1 row) select digest(pgp_sym_decrypt(dearmor(' ->>>>>>> REL_16_9 -----BEGIN PGP MESSAGE----- Comment: dat3.aes.sha1.mdc.s2k3.z0 @@ -346,17 +320,6 @@ gFnkUKIE0PSaYFp+Yi1VlRfUtRQ/X/LYNGa7tWZS+4VQajz2Xtz4vUeAEiYFYPXk 73Hb8m1yRhQK =ivrD -----END PGP MESSAGE----- -<<<<<<< HEAD -'), '0123456789abcdefghij'), 'sha1'), 'hex'); - encode ------------------------------------------- - 5e5c135efc0dd00633efc6dfd6e731ea408a5b4c -(1 row) - --- expected: 5e5c135efc0dd00633efc6dfd6e731ea408a5b4c --- Checking CRLF -select encode(digest(pgp_sym_decrypt(dearmor(' -======= '), '0123456789abcdefghij'), 'sha1'); digest -------------------------------------------- @@ -365,7 +328,6 @@ select encode(digest(pgp_sym_decrypt(dearmor(' -- Checking CRLF select digest(pgp_sym_decrypt(dearmor(' ->>>>>>> REL_16_9 -----BEGIN PGP MESSAGE----- Comment: crlf mess @@ -373,16 +335,6 @@ ww0ECQMCt7VAtby6l4Bi0lgB5KMIZiiF/b3CfMfUyY0eDncsGXtkbu1X+l9brjpMP8eJnY79Amms a3nsOzKTXUfS9VyaXo8IrncM6n7fdaXpwba/3tNsAhJG4lDv1k4g9v8Ix2dfv6Rs =mBP9 -----END PGP MESSAGE----- -<<<<<<< HEAD -'), 'key', 'convert-crlf=0'), 'sha1'), 'hex'); - encode ------------------------------------------- - 9353062be7720f1446d30b9e75573a4833886784 -(1 row) - --- expected: 9353062be7720f1446d30b9e75573a4833886784 -select encode(digest(pgp_sym_decrypt(dearmor(' -======= '), 'key', 'convert-crlf=0'), 'sha1'); digest -------------------------------------------- @@ -390,7 +342,6 @@ select encode(digest(pgp_sym_decrypt(dearmor(' (1 row) select digest(pgp_sym_decrypt(dearmor(' ->>>>>>> REL_16_9 -----BEGIN PGP MESSAGE----- Comment: crlf mess @@ -398,22 +349,12 @@ ww0ECQMCt7VAtby6l4Bi0lgB5KMIZiiF/b3CfMfUyY0eDncsGXtkbu1X+l9brjpMP8eJnY79Amms a3nsOzKTXUfS9VyaXo8IrncM6n7fdaXpwba/3tNsAhJG4lDv1k4g9v8Ix2dfv6Rs =mBP9 -----END PGP MESSAGE----- -<<<<<<< HEAD -'), 'key', 'convert-crlf=1'), 'sha1'), 'hex'); - encode ------------------------------------------- - 7efefcab38467f7484d6fa43dc86cf5281bd78e2 -(1 row) - --- expected: 7efefcab38467f7484d6fa43dc86cf5281bd78e2 -======= '), 'key', 'convert-crlf=1'), 'sha1'); digest -------------------------------------------- \x7efefcab38467f7484d6fa43dc86cf5281bd78e2 (1 row) ->>>>>>> REL_16_9 -- check BUG #11905, problem with messages 6 less than a power of 2. select pgp_sym_decrypt(pgp_sym_encrypt(repeat('x',65530),'1'),'1') = repeat('x',65530); ?column? @@ -421,10 +362,6 @@ select pgp_sym_decrypt(pgp_sym_encrypt(repeat('x',65530),'1'),'1') = repeat('x', t (1 row) -<<<<<<< HEAD --- expected: true -======= ->>>>>>> REL_16_9 -- Negative tests -- Decryption with a certain incorrect key yields an apparent Literal Data -- packet reporting its content to be binary data. Ciphertext source: diff --git a/contrib/pgcrypto/expected/sha2.out b/contrib/pgcrypto/expected/sha2.out index d3053b61ac1..6f67fe6eca0 100644 --- a/contrib/pgcrypto/expected/sha2.out +++ b/contrib/pgcrypto/expected/sha2.out @@ -137,38 +137,3 @@ SELECT digest('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklm \x930d0cefcb30ff1133b6898121f1cf3d27578afcafe8677c5257cf069911f75d8f5831b56ebfda67b278e66dff8b84fe2b2870f742a580d8edb41987232850c9 (1 row) --- SM3 --- `icw_bash` will used `--with-openssl` version. --- but openssl version which cbdb required have not SM2/SM3/SM4 --- start_ignore -SELECT encode(digest('', 'sm3'), 'hex'); - encode ------------------------------------------------------------------- - 1ab21d8355cfa17f8e61194831e81a8f22bec8c728fefb747ed035eb5082aa2b -(1 row) -SELECT encode(digest('a', 'sm3'), 'hex'); - encode ------------------------------------------------------------------- - 623476ac18f65a2909e43c7fec61b49c7e764a91a18ccb82f1917a29c86c5e88 -(1 row) -SELECT encode(digest('abc', 'sm3'), 'hex'); - encode ------------------------------------------------------------------- - 66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0 -(1 row) -SELECT encode(digest('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq', 'sm3'), 'hex'); - encode ------------------------------------------------------------------- - 639b6cc5e64d9e37a390b192df4fa1ea0720ab747ff692b9f38c4e66ad7b8c05 -(1 row) -SELECT encode(digest('abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu', 'sm3'), 'hex'); - encode ------------------------------------------------------------------- - 78bcfb586acd983d7fae8e6930157f1562019e2caf68f1c98a855f1a95bb89bb -(1 row) -SELECT encode(digest('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz', 'sm3'), 'hex'); - encode ------------------------------------------------------------------- - 4556fcdd169ca9c5b33b99b3f39f92072ba7382b0fb167c61f89aec1de9e5796 -(1 row) --- end_ignore \ No newline at end of file diff --git a/contrib/pgcrypto/openssl.c b/contrib/pgcrypto/openssl.c index f2b80b9a62e..8003cb6d34d 100644 --- a/contrib/pgcrypto/openssl.c +++ b/contrib/pgcrypto/openssl.c @@ -423,11 +423,7 @@ gen_ossl_decrypt(PX_Cipher *c, int padding, const uint8 *data, unsigned dlen, { if (!EVP_DecryptInit_ex(od->evp_ctx, od->evp_ciph, NULL, NULL, NULL)) return PXE_CIPHER_INIT; -<<<<<<< HEAD - if (!EVP_CIPHER_CTX_set_padding(od->evp_ctx, 0)) -======= if (!EVP_CIPHER_CTX_set_padding(od->evp_ctx, padding)) ->>>>>>> REL_16_9 return PXE_CIPHER_INIT; if (!EVP_CIPHER_CTX_set_key_length(od->evp_ctx, od->klen)) return PXE_CIPHER_INIT; @@ -457,11 +453,7 @@ gen_ossl_encrypt(PX_Cipher *c, int padding, const uint8 *data, unsigned dlen, { if (!EVP_EncryptInit_ex(od->evp_ctx, od->evp_ciph, NULL, NULL, NULL)) return PXE_CIPHER_INIT; -<<<<<<< HEAD - if (!EVP_CIPHER_CTX_set_padding(od->evp_ctx, 0)) -======= if (!EVP_CIPHER_CTX_set_padding(od->evp_ctx, padding)) ->>>>>>> REL_16_9 return PXE_CIPHER_INIT; if (!EVP_CIPHER_CTX_set_key_length(od->evp_ctx, od->klen)) return PXE_CIPHER_INIT; diff --git a/contrib/pgcrypto/pgcrypto.c b/contrib/pgcrypto/pgcrypto.c index a3e33b0952e..98666cd4d3d 100644 --- a/contrib/pgcrypto/pgcrypto.c +++ b/contrib/pgcrypto/pgcrypto.c @@ -39,15 +39,12 @@ #include "px.h" #include "utils/builtins.h" #include "utils/uuid.h" -<<<<<<< HEAD #include "utils/guc.h" #include "px-crypt.h" #include "pgcrypto.h" #include "pgp.h" -======= #include "varatt.h" ->>>>>>> REL_16_9 PG_MODULE_MAGIC; diff --git a/contrib/pgcrypto/sql/sha2.sql b/contrib/pgcrypto/sql/sha2.sql index ffca965a340..3aafd354070 100644 --- a/contrib/pgcrypto/sql/sha2.sql +++ b/contrib/pgcrypto/sql/sha2.sql @@ -25,30 +25,9 @@ SELECT digest('abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoi SELECT digest('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz', 'sha384'); -- SHA512 -<<<<<<< HEAD -SELECT encode(digest('', 'sha512'), 'hex'); -SELECT encode(digest('a', 'sha512'), 'hex'); -SELECT encode(digest('abc', 'sha512'), 'hex'); -SELECT encode(digest('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq', 'sha512'), 'hex'); -SELECT encode(digest('abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu', 'sha512'), 'hex'); -SELECT encode(digest('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz', 'sha512'), 'hex'); - --- SM3 --- `icw_bash` will used `--with-openssl` version. --- but openssl version which cbdb required have not SM2/SM3/SM4 --- start_ignore -SELECT encode(digest('', 'sm3'), 'hex'); -SELECT encode(digest('a', 'sm3'), 'hex'); -SELECT encode(digest('abc', 'sm3'), 'hex'); -SELECT encode(digest('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq', 'sm3'), 'hex'); -SELECT encode(digest('abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu', 'sm3'), 'hex'); -SELECT encode(digest('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz', 'sm3'), 'hex'); --- end_ignore -======= SELECT digest('', 'sha512'); SELECT digest('a', 'sha512'); SELECT digest('abc', 'sha512'); SELECT digest('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq', 'sha512'); SELECT digest('abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu', 'sha512'); SELECT digest('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz', 'sha512'); ->>>>>>> REL_16_9 diff --git a/contrib/pgrowlocks/.gitignore b/contrib/pgrowlocks/.gitignore index 8c8bfe89b06..7349813e489 100644 --- a/contrib/pgrowlocks/.gitignore +++ b/contrib/pgrowlocks/.gitignore @@ -1,10 +1,7 @@ -<<<<<<< HEAD pgrowlocks.sql -======= # Generated subdirectories /log/ /results/ /output_iso/ /tmp_check/ /tmp_check_iso/ ->>>>>>> REL_16_9 diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index 48c74119eaf..45bc36d9062 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -553,10 +553,6 @@ EXPLAIN (VERBOSE, COSTS OFF) Output: t1."C 1" -> Gather Motion 3:1 (slice1; segments: 3) Output: t1."C 1" -<<<<<<< HEAD - Merge Key: t1."C 1" - -> Limit -======= Inner Unique: true Merge Cond: (t3.c1 = t1."C 1") -> Foreign Scan @@ -564,7 +560,6 @@ EXPLAIN (VERBOSE, COSTS OFF) Relations: (public.ft1 t2) INNER JOIN (public.ft2 t3) Remote SQL: SELECT r3."C 1" FROM ("S 1"."T 1" r2 INNER JOIN "S 1"."T 1" r3 ON (((r3."C 1" = r2."C 1")))) ORDER BY r2."C 1" ASC NULLS LAST -> Index Only Scan using t1_pkey on "S 1"."T 1" t1 ->>>>>>> REL_16_9 Output: t1."C 1" -> Merge Left Join Output: t1."C 1" @@ -834,25 +829,6 @@ EXPLAIN (VERBOSE, COSTS OFF) ------------------------------------------------------------------------------------------------------------------- Gather Motion 3:1 (slice1; segments: 3) Output: a."C 1", a.c2, a.c3, a.c4, a.c5, a.c6, a.c7, a.c8, b.c1, b.c2, b.c3, b.c4, b.c5, b.c6, b.c7, b.c8 -<<<<<<< HEAD - -> Hash Join - Output: a."C 1", a.c2, a.c3, a.c4, a.c5, a.c6, a.c7, a.c8, b.c1, b.c2, b.c3, b.c4, b.c5, b.c6, b.c7, b.c8 - Inner Unique: true - Hash Cond: (b.c1 = a.c2) - -> Redistribute Motion 1:3 (slice2) - Output: b.c1, b.c2, b.c3, b.c4, b.c5, b.c6, b.c7, b.c8 - Hash Key: 47 - -> Foreign Scan on public.ft2 b - Output: b.c1, b.c2, b.c3, b.c4, b.c5, b.c6, b.c7, b.c8 - Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" - -> Hash - Output: a."C 1", a.c2, a.c3, a.c4, a.c5, a.c6, a.c7, a.c8 - -> Seq Scan on "S 1"."T 1" a - Output: a."C 1", a.c2, a.c3, a.c4, a.c5, a.c6, a.c7, a.c8 - Filter: (a."C 1" = 47) - Optimizer: Postgres query optimizer -(18 rows) -======= -> Index Scan using t1_pkey on "S 1"."T 1" a Output: a."C 1", a.c2, a.c3, a.c4, a.c5, a.c6, a.c7, a.c8 Index Cond: (a."C 1" = 47) @@ -860,7 +836,6 @@ EXPLAIN (VERBOSE, COSTS OFF) Output: b.c1, b.c2, b.c3, b.c4, b.c5, b.c6, b.c7, b.c8 Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (("C 1" = $1::integer)) (8 rows) ->>>>>>> REL_16_9 SELECT * FROM "S 1"."T 1" a, ft2 b WHERE a."C 1" = 47 AND b.c1 = a.c2; C 1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 | c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8 @@ -879,21 +854,9 @@ EXPLAIN (VERBOSE, COSTS OFF) Hash Cond: ((b.c1 = a.c1) AND ((b.c7)::text = upper((a.c7)::text))) -> Foreign Scan on public.ft2 b Output: b.c1, b.c2, b.c3, b.c4, b.c5, b.c6, b.c7, b.c8 -<<<<<<< HEAD - Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" - -> Hash - Output: a.c1, a.c2, a.c3, a.c4, a.c5, a.c6, a.c7, a.c8 - -> Foreign Scan on public.ft2 a - Output: a.c1, a.c2, a.c3, a.c4, a.c5, a.c6, a.c7, a.c8 - Filter: (a.c8 = 'foo'::user_enum) - Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE ((c2 = 6)) - Optimizer: Postgres query optimizer -(13 rows) -======= Filter: ((b.c7)::text = upper((a.c7)::text)) Remote SQL: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE (($1::integer = "C 1")) (10 rows) ->>>>>>> REL_16_9 SELECT * FROM ft2 a, ft2 b WHERE a.c2 = 6 AND b.c1 = a.c1 AND a.c8 = 'foo' AND b.c7 = upper(a.c7); @@ -1174,9 +1137,6 @@ SELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1; 1 | 1 | 00001 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1 | 1 | foo (1 row) -<<<<<<< HEAD --- check schema-qualification of regconfig constant -======= -- Ensure we don't ship FETCH FIRST .. WITH TIES EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c2 FROM ft1 t1 WHERE t1.c1 > 960 ORDER BY t1.c2 FETCH FIRST 2 ROWS WITH TIES; @@ -1290,14 +1250,11 @@ SELECT * FROM ft1 WHERE CASE c3 COLLATE "C" WHEN c6 THEN true ELSE c3 < 'bar' EN -- a regconfig constant referring to this text search configuration -- is initially unshippable ->>>>>>> REL_16_9 CREATE TEXT SEARCH CONFIGURATION public.custom_search (COPY = pg_catalog.english); EXPLAIN (VERBOSE, COSTS OFF) SELECT c1, to_tsvector('custom_search'::regconfig, c3) FROM ft1 WHERE c1 = 642 AND length(to_tsvector('custom_search'::regconfig, c3)) > 0; -<<<<<<< HEAD -======= QUERY PLAN ------------------------------------------------------------------------- Foreign Scan on public.ft1 @@ -1320,7 +1277,6 @@ ALTER EXTENSION postgres_fdw ADD TEXT SEARCH CONFIGURATION public.custom_search; EXPLAIN (VERBOSE, COSTS OFF) SELECT c1, to_tsvector('custom_search'::regconfig, c3) FROM ft1 WHERE c1 = 642 AND length(to_tsvector('custom_search'::regconfig, c3)) > 0; ->>>>>>> REL_16_9 QUERY PLAN ---------------------------------------------------------------------------------------------------------------------------------------------- Foreign Scan on public.ft1 @@ -1335,8 +1291,6 @@ WHERE c1 = 642 AND length(to_tsvector('custom_search'::regconfig, c3)) > 0; 642 | '00642':1 (1 row) -<<<<<<< HEAD -======= -- =================================================================== -- ORDER BY queries -- =================================================================== @@ -1404,7 +1358,6 @@ SELECT * FROM ( Remote SQL: SELECT "C 1" FROM "S 1"."T 1" (8 rows) ->>>>>>> REL_16_9 -- =================================================================== -- JOIN queries -- =================================================================== @@ -1445,29 +1398,9 @@ SELECT t1.c1, t2.c2, t3.c3 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) JOIN ft4 t ------------------------------------------------------------------------------------------------------------------------------------------------------ Limit Output: t1.c1, t2.c2, t3.c3, t1.c3 -<<<<<<< HEAD - -> Sort - Output: t1.c1, t2.c2, t3.c3, t1.c3 - Sort Key: t1.c3, t1.c1 - -> Hash Join - Output: t1.c1, t2.c2, t3.c3, t1.c3 - Hash Cond: (t2.c1 = t1.c1) - -> Foreign Scan on public.ft2 t2 - Output: t2.c2, t2.c1 - Remote SQL: SELECT "C 1", c2 FROM "S 1"."T 1" - -> Hash - Output: t1.c1, t1.c3, t3.c3, t3.c1 - -> Foreign Scan - Output: t1.c1, t1.c3, t3.c3, t3.c1 - Relations: (public.ft1 t1) INNER JOIN (public.ft4 t3) - Remote SQL: SELECT r1."C 1", r1.c3, r4.c3, r4.c1 FROM ("S 1"."T 1" r1 INNER JOIN "S 1"."T 3" r4 ON (((r1."C 1" = r4.c1)))) - Optimizer: Postgres query optimizer -(18 rows) -======= Relations: ((public.ft1 t1) INNER JOIN (public.ft2 t2)) INNER JOIN (public.ft4 t3) Remote SQL: SELECT r1."C 1", r2.c2, r4.c3, r1.c3 FROM (("S 1"."T 1" r1 INNER JOIN "S 1"."T 1" r2 ON (((r2."C 1" = r1."C 1")))) INNER JOIN "S 1"."T 3" r4 ON (((r1."C 1" = r4.c1)))) ORDER BY r1.c3 ASC NULLS LAST, r1."C 1" ASC NULLS LAST LIMIT 10::bigint OFFSET 10::bigint (4 rows) ->>>>>>> REL_16_9 SELECT t1.c1, t2.c2, t3.c3 FROM ft1 t1 JOIN ft2 t2 ON (t1.c1 = t2.c1) JOIN ft4 t3 ON (t3.c1 = t1.c1) ORDER BY t1.c3, t1.c1 OFFSET 10 LIMIT 10; c1 | c2 | c3 @@ -2525,11 +2458,7 @@ SELECT t1."C 1" FROM "S 1"."T 1" t1, LATERAL (SELECT DISTINCT t2.c1, t3.c1 FROM -> Foreign Scan Output: t2.c1, t3.c1 Relations: (public.ft1 t2) INNER JOIN (public.ft2 t3) -<<<<<<< HEAD - Remote SQL: SELECT r1."C 1", r2."C 1" FROM ("S 1"."T 1" r1 INNER JOIN "S 1"."T 1" r2 ON (((r1."C 1" = r2."C 1")) AND ((r1.c2 = $1::integer)))) -======= Remote SQL: SELECT r1."C 1", r2."C 1" FROM ("S 1"."T 1" r1 INNER JOIN "S 1"."T 1" r2 ON (((r2."C 1" = r1."C 1")) AND ((r1.c2 = $1::integer)))) ->>>>>>> REL_16_9 (17 rows) SELECT t1."C 1" FROM "S 1"."T 1" t1, LATERAL (SELECT DISTINCT t2.c1, t3.c1 FROM ft1 t2, ft2 t3 WHERE t2.c1 = t3.c1 AND t2.c2 = t1.c2) q ORDER BY t1."C 1" OFFSET 10 LIMIT 10; @@ -3740,10 +3669,7 @@ select array_agg(c1 order by c1 using operator(public.<^)) from ft2 where c2 = 6 {6,16,26,36,46,56,66,76,86,96} (1 row) -<<<<<<< HEAD -======= alter server loopback options (drop fdw_tuple_cost); ->>>>>>> REL_16_9 -- This should be pushed too. explain (verbose, costs off) select * from ft2 order by c1 using operator(public.<^); @@ -4674,8 +4600,6 @@ CONTEXT: processing expression at position 2 in select list ANALYZE ft1; -- ERROR ERROR: invalid input syntax for type integer: "foo" CONTEXT: column "c8" of foreign table "ft1" -<<<<<<< HEAD -======= ALTER FOREIGN TABLE ft1 ALTER COLUMN c8 TYPE user_enum; -- =================================================================== -- local type can be different from remote type in some cases, @@ -4723,7 +4647,6 @@ SELECT * FROM ft1 WHERE c8::text LIKE 'foo' LIMIT 1; -- ERROR; cast not pushed d ERROR: operator does not exist: public.user_enum ~~ unknown HINT: No operator matches the given name and argument types. You might need to add explicit type casts. CONTEXT: remote SQL command: SELECT "C 1", c2, c3, c4, c5, c6, c7, c8 FROM "S 1"."T 1" WHERE ((c8 ~~ 'foo')) LIMIT 1::bigint ->>>>>>> REL_16_9 ALTER FOREIGN TABLE ft1 ALTER COLUMN c8 TYPE user_enum; -- =================================================================== -- subtransaction @@ -7294,8 +7217,6 @@ select * from grem1; (2 rows) delete from grem1; -<<<<<<< HEAD -======= -- batch insert with foreign partitions. -- This schema uses two partitions, one local and one remote with a modulo -- to loop across all of them in batches. @@ -7318,7 +7239,6 @@ select count(*) from tab_batch_sharded; drop table tab_batch_local; drop table tab_batch_sharded; drop table tab_batch_sharded_p1_remote; ->>>>>>> REL_16_9 alter server loopback options (drop batch_size); -- =================================================================== -- test local triggers @@ -10319,14 +10239,6 @@ WARNING: there is no transaction in progress -- Change application_name of remote connection to special one -- so that we can easily terminate the connection later. ALTER SERVER loopback OPTIONS (application_name 'fdw_retry_check'); -<<<<<<< HEAD --- If debug_discard_caches is active, it results in --- dropping remote connections after every transaction, making it --- impossible to test termination meaningfully. So turn that off --- for this test. -SET debug_discard_caches = 0; -======= ->>>>>>> REL_16_9 -- Make sure we have a remote connection. SELECT 1 FROM ft1 LIMIT 1; ?column? @@ -10364,10 +10276,6 @@ SELECT 1 FROM ft1 LIMIT 1; -- should fail ERROR: 08006 \set VERBOSITY default COMMIT; -<<<<<<< HEAD -RESET debug_discard_caches; -======= ->>>>>>> REL_16_9 -- ============================================================================= -- test connection invalidation cases and postgres_fdw_get_connections function -- ============================================================================= @@ -11523,8 +11431,6 @@ DROP TABLE local_tbl; DROP INDEX base_tbl1_idx; DROP INDEX base_tbl2_idx; DROP INDEX async_p3_idx; -<<<<<<< HEAD -======= -- UNION queries EXPLAIN (VERBOSE, COSTS OFF) INSERT INTO result_tbl @@ -11607,7 +11513,6 @@ SELECT * FROM result_tbl ORDER BY a; (12 rows) DELETE FROM result_tbl; ->>>>>>> REL_16_9 -- Disable async execution if we use gating Result nodes for pseudoconstant -- quals EXPLAIN (VERBOSE, COSTS OFF) @@ -11634,8 +11539,6 @@ SELECT * FROM async_pt WHERE CURRENT_USER = SESSION_USER; Output: async_pt_3.a, async_pt_3.b, async_pt_3.c (18 rows) -<<<<<<< HEAD -======= EXPLAIN (VERBOSE, COSTS OFF) (SELECT * FROM async_p1 WHERE CURRENT_USER = SESSION_USER) UNION ALL @@ -11676,7 +11579,6 @@ SELECT * FROM ((SELECT * FROM async_p1 WHERE b < 10) UNION ALL (SELECT * FROM as Remote SQL: SELECT a, b, c FROM public.base_tbl2 WHERE ((b < 10)) (13 rows) ->>>>>>> REL_16_9 -- Test that pending requests are processed properly SET enable_mergejoin TO false; SET enable_hashjoin TO false; @@ -12001,11 +11903,7 @@ DROP TABLE base_tbl; ALTER SERVER loopback OPTIONS (DROP async_capable); ALTER SERVER loopback2 OPTIONS (DROP async_capable); -- =================================================================== -<<<<<<< HEAD --- test invalid server and foreign table options -======= -- test invalid server, foreign table and foreign data wrapper options ->>>>>>> REL_16_9 -- =================================================================== -- Invalid fdw_startup_cost option CREATE SERVER inv_scst FOREIGN DATA WRAPPER postgres_fdw @@ -12023,8 +11921,6 @@ ERROR: invalid value for integer option "fetch_size": 100$%$#$# CREATE FOREIGN TABLE inv_bsz (c1 int ) SERVER loopback OPTIONS (batch_size '100$%$#$#'); ERROR: invalid value for integer option "batch_size": 100$%$#$# -<<<<<<< HEAD -======= -- No option is allowed to be specified at foreign data wrapper level ALTER FOREIGN DATA WRAPPER postgres_fdw OPTIONS (nonexistent 'fdw'); ERROR: invalid option "nonexistent" @@ -12247,4 +12143,3 @@ ANALYZE analyze_table; -- cleanup DROP FOREIGN TABLE analyze_ftable; DROP TABLE analyze_table; ->>>>>>> REL_16_9 diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql index b9f48309cc7..e3f59f4237b 100644 --- a/contrib/postgres_fdw/sql/postgres_fdw.sql +++ b/contrib/postgres_fdw/sql/postgres_fdw.sql @@ -416,9 +416,6 @@ EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1; SELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1; -<<<<<<< HEAD --- check schema-qualification of regconfig constant -======= -- Ensure we don't ship FETCH FIRST .. WITH TIES EXPLAIN (VERBOSE, COSTS OFF) SELECT t1.c2 FROM ft1 t1 WHERE t1.c1 > 960 ORDER BY t1.c2 FETCH FIRST 2 ROWS WITH TIES; @@ -455,7 +452,6 @@ SELECT * FROM ft1 WHERE CASE c3 COLLATE "C" WHEN c6 THEN true ELSE c3 < 'bar' EN -- a regconfig constant referring to this text search configuration -- is initially unshippable ->>>>>>> REL_16_9 CREATE TEXT SEARCH CONFIGURATION public.custom_search (COPY = pg_catalog.english); EXPLAIN (VERBOSE, COSTS OFF) @@ -463,8 +459,6 @@ SELECT c1, to_tsvector('custom_search'::regconfig, c3) FROM ft1 WHERE c1 = 642 AND length(to_tsvector('custom_search'::regconfig, c3)) > 0; SELECT c1, to_tsvector('custom_search'::regconfig, c3) FROM ft1 WHERE c1 = 642 AND length(to_tsvector('custom_search'::regconfig, c3)) > 0; -<<<<<<< HEAD -======= -- but if it's in a shippable extension, it can be shipped ALTER EXTENSION postgres_fdw ADD TEXT SEARCH CONFIGURATION public.custom_search; -- however, that doesn't flush the shippability cache, so do a quick reconnect @@ -500,7 +494,6 @@ SELECT * FROM ( UNION ALL SELECT 2 AS type,c1 FROM ft2 ) a ORDER BY type; ->>>>>>> REL_16_9 -- =================================================================== -- JOIN queries @@ -1285,8 +1278,6 @@ SELECT ftx.x1, ft2.c2, ftx FROM ft1 ftx(x1,x2,x3,x4,x5,x6,x7,x8), ft2 WHERE ftx.x1 = ft2.c1 AND ftx.x1 = 1; -- ERROR SELECT sum(c2), array_agg(c8) FROM ft1 GROUP BY c8; -- ERROR ANALYZE ft1; -- ERROR -<<<<<<< HEAD -======= ALTER FOREIGN TABLE ft1 ALTER COLUMN c8 TYPE user_enum; -- =================================================================== @@ -1305,7 +1296,6 @@ SELECT * FROM ft1 WHERE 'foo' = c8 LIMIT 1; -- with that remote type SELECT * FROM ft1 WHERE c8 LIKE 'foo' LIMIT 1; -- ERROR SELECT * FROM ft1 WHERE c8::text LIKE 'foo' LIMIT 1; -- ERROR; cast not pushed down ->>>>>>> REL_16_9 ALTER FOREIGN TABLE ft1 ALTER COLUMN c8 TYPE user_enum; -- =================================================================== @@ -1756,8 +1746,6 @@ insert into grem1 (a) values (1), (2); select * from gloc1; select * from grem1; delete from grem1; -<<<<<<< HEAD -======= -- batch insert with foreign partitions. -- This schema uses two partitions, one local and one remote with a modulo -- to loop across all of them in batches. @@ -1776,7 +1764,6 @@ drop table tab_batch_local; drop table tab_batch_sharded; drop table tab_batch_sharded_p1_remote; ->>>>>>> REL_16_9 alter server loopback options (drop batch_size); -- =================================================================== @@ -3224,15 +3211,6 @@ ROLLBACK; -- so that we can easily terminate the connection later. ALTER SERVER loopback OPTIONS (application_name 'fdw_retry_check'); -<<<<<<< HEAD --- If debug_discard_caches is active, it results in --- dropping remote connections after every transaction, making it --- impossible to test termination meaningfully. So turn that off --- for this test. -SET debug_discard_caches = 0; - -======= ->>>>>>> REL_16_9 -- Make sure we have a remote connection. SELECT 1 FROM ft1 LIMIT 1; @@ -3263,11 +3241,6 @@ SELECT 1 FROM ft1 LIMIT 1; -- should fail \set VERBOSITY default COMMIT; -<<<<<<< HEAD -RESET debug_discard_caches; - -======= ->>>>>>> REL_16_9 -- ============================================================================= -- test connection invalidation cases and postgres_fdw_get_connections function -- ============================================================================= @@ -3821,8 +3794,6 @@ DROP INDEX base_tbl1_idx; DROP INDEX base_tbl2_idx; DROP INDEX async_p3_idx; -<<<<<<< HEAD -======= -- UNION queries EXPLAIN (VERBOSE, COSTS OFF) INSERT INTO result_tbl @@ -3850,14 +3821,11 @@ UNION ALL SELECT * FROM result_tbl ORDER BY a; DELETE FROM result_tbl; ->>>>>>> REL_16_9 -- Disable async execution if we use gating Result nodes for pseudoconstant -- quals EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM async_pt WHERE CURRENT_USER = SESSION_USER; -<<<<<<< HEAD -======= EXPLAIN (VERBOSE, COSTS OFF) (SELECT * FROM async_p1 WHERE CURRENT_USER = SESSION_USER) UNION ALL @@ -3866,7 +3834,6 @@ UNION ALL EXPLAIN (VERBOSE, COSTS OFF) SELECT * FROM ((SELECT * FROM async_p1 WHERE b < 10) UNION ALL (SELECT * FROM async_p2 WHERE b < 10)) s WHERE CURRENT_USER = SESSION_USER; ->>>>>>> REL_16_9 -- Test that pending requests are processed properly SET enable_mergejoin TO false; SET enable_hashjoin TO false; @@ -3970,11 +3937,7 @@ ALTER SERVER loopback OPTIONS (DROP async_capable); ALTER SERVER loopback2 OPTIONS (DROP async_capable); -- =================================================================== -<<<<<<< HEAD --- test invalid server and foreign table options -======= -- test invalid server, foreign table and foreign data wrapper options ->>>>>>> REL_16_9 -- =================================================================== -- Invalid fdw_startup_cost option CREATE SERVER inv_scst FOREIGN DATA WRAPPER postgres_fdw @@ -3988,8 +3951,6 @@ CREATE FOREIGN TABLE inv_fsz (c1 int ) -- Invalid batch_size option CREATE FOREIGN TABLE inv_bsz (c1 int ) SERVER loopback OPTIONS (batch_size '100$%$#$#'); -<<<<<<< HEAD -======= -- No option is allowed to be specified at foreign data wrapper level ALTER FOREIGN DATA WRAPPER postgres_fdw OPTIONS (nonexistent 'fdw'); @@ -4153,4 +4114,3 @@ ANALYZE analyze_table; -- cleanup DROP FOREIGN TABLE analyze_ftable; DROP TABLE analyze_table; ->>>>>>> REL_16_9 diff --git a/contrib/seg/expected/seg.out b/contrib/seg/expected/seg.out index 093616dc208..3d62e4c092f 100644 --- a/contrib/seg/expected/seg.out +++ b/contrib/seg/expected/seg.out @@ -1274,16 +1274,6 @@ FROM test_seg WHERE s @> '11.2..11.3' OR s IS NULL ORDER BY s; | | (144 rows) -<<<<<<< HEAD --- Test that has all opclasses -select opcname,amname from pg_opclass opc, pg_am am where am.oid=opc.opcmethod and opcintype='seg'::regtype; - opcname | amname ---------------+-------- - seg_ops | btree - gist_seg_ops | gist - seg_ops | bitmap -(3 rows) -======= -- test non error throwing API SELECT str as seg, pg_input_is_valid(str,'seg') as ok, @@ -1307,5 +1297,4 @@ FROM unnest(ARRAY['-1 .. 1'::text, 1 e7 | f | 42601 | bad seg representation | syntax error at or near "e" | 1e700 | f | 22003 | "1e700" is out of range for type real | | (6 rows) ->>>>>>> REL_16_9 diff --git a/contrib/seg/sql/seg.sql b/contrib/seg/sql/seg.sql index d9bd77767f3..c30f1f6bef1 100644 --- a/contrib/seg/sql/seg.sql +++ b/contrib/seg/sql/seg.sql @@ -239,10 +239,6 @@ SELECT * FROM test_seg WHERE s @> '11..11.3' GROUP BY s; SELECT seg_lower(s), seg_center(s), seg_upper(s) FROM test_seg WHERE s @> '11.2..11.3' OR s IS NULL ORDER BY s; -<<<<<<< HEAD --- Test that has all opclasses -select opcname,amname from pg_opclass opc, pg_am am where am.oid=opc.opcmethod and opcintype='citext'::regtype; -======= -- test non error throwing API @@ -259,4 +255,3 @@ FROM unnest(ARRAY['-1 .. 1'::text, '1 e7', '1e700']) str, LATERAL pg_input_error_info(str, 'seg') as errinfo; ->>>>>>> REL_16_9 diff --git a/contrib/sepgsql/expected/ddl.out b/contrib/sepgsql/expected/ddl.out index 6a073d17ce9..15d2b9c5e7d 100644 --- a/contrib/sepgsql/expected/ddl.out +++ b/contrib/sepgsql/expected/ddl.out @@ -23,11 +23,7 @@ LOG: SELinux: allowed { getattr } scontext=unconfined_u:unconfined_r:sepgsql_re LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_db_t:s0 tclass=db_database name="sepgsql_test_regression" permissive=0 CREATE USER regress_sepgsql_test_user; CREATE SCHEMA regtest_schema; -<<<<<<< HEAD -LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" -======= LOG: SELinux: allowed { create } scontext=unconfined_u:unconfined_r:sepgsql_regtest_superuser_t:s0 tcontext=unconfined_u:object_r:sepgsql_schema_t:s0 tclass=db_schema name="regtest_schema" permissive=0 ->>>>>>> REL_16_9 GRANT ALL ON SCHEMA regtest_schema TO regress_sepgsql_test_user; SET search_path = regtest_schema, public; CREATE TABLE regtest_table (x serial primary key, y text); diff --git a/contrib/test_decoding/expected/replorigin.out b/contrib/test_decoding/expected/replorigin.out index e8a28297840..c85e1a01b23 100644 --- a/contrib/test_decoding/expected/replorigin.out +++ b/contrib/test_decoding/expected/replorigin.out @@ -267,8 +267,6 @@ SELECT pg_replication_origin_drop('regress_test_decoding: regression_slot_no_lsn (1 row) -<<<<<<< HEAD -======= -- Test that the pgoutput correctly filters changes corresponding to the provided origin value. SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'pgoutput'); ?column? @@ -325,4 +323,3 @@ SELECT pg_replication_origin_drop('regress_test_decoding: regression_slot'); (1 row) DROP PUBLICATION pub; ->>>>>>> REL_16_9 diff --git a/contrib/test_decoding/sql/replorigin.sql b/contrib/test_decoding/sql/replorigin.sql index a31e2b472a5..e71ee02d050 100644 --- a/contrib/test_decoding/sql/replorigin.sql +++ b/contrib/test_decoding/sql/replorigin.sql @@ -124,8 +124,6 @@ SELECT data FROM pg_logical_slot_get_changes('regression_slot_no_lsn', NULL, NUL SELECT pg_replication_origin_session_reset(); SELECT pg_drop_replication_slot('regression_slot_no_lsn'); SELECT pg_replication_origin_drop('regress_test_decoding: regression_slot_no_lsn'); -<<<<<<< HEAD -======= -- Test that the pgoutput correctly filters changes corresponding to the provided origin value. SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'pgoutput'); @@ -148,4 +146,3 @@ SELECT pg_replication_origin_session_reset(); SELECT pg_drop_replication_slot('regression_slot'); SELECT pg_replication_origin_drop('regress_test_decoding: regression_slot'); DROP PUBLICATION pub; ->>>>>>> REL_16_9 diff --git a/src/include/utils/numeric.h b/src/include/utils/numeric.h index 494972d5c6d..d175e858879 100644 --- a/src/include/utils/numeric.h +++ b/src/include/utils/numeric.h @@ -15,6 +15,7 @@ #define _PG_NUMERIC_H_ #include "fmgr.h" +#include "nodes/nodes.h" /* * Limits on the precision and scale specifiable in a NUMERIC typmod. The