mirror of https://github.com/citusdata/citus.git
PG16 - Add COPY FROM default tests (#7143)
Already supported in Citus, adding the same tests as in PG Relevant PG commit: https://github.com/postgres/postgres/commit/9f8377fpull/7146/head
parent
70c8aba967
commit
afab879de3
|
@ -202,6 +202,138 @@ SELECT create_distributed_table('test_storage', 'a');
|
|||
ALTER TABLE test_storage ALTER a SET STORAGE default;
|
||||
ERROR: alter table command is currently unsupported
|
||||
DETAIL: Only ADD|DROP COLUMN, SET|DROP NOT NULL, SET|DROP DEFAULT, ADD|DROP|VALIDATE CONSTRAINT, SET (), RESET (), ENABLE|DISABLE|NO FORCE|FORCE ROW LEVEL SECURITY, ATTACH|DETACH PARTITION and TYPE subcommands are supported.
|
||||
--
|
||||
-- COPY FROM ... DEFAULT
|
||||
-- Already supported in Citus, adding all PG tests with a distributed table
|
||||
-- Relevant PG commit:
|
||||
-- https://github.com/postgres/postgres/commit/9f8377f
|
||||
CREATE TABLE copy_default (
|
||||
id integer PRIMARY KEY,
|
||||
text_value text NOT NULL DEFAULT 'test',
|
||||
ts_value timestamp without time zone NOT NULL DEFAULT '2022-07-05'
|
||||
);
|
||||
SELECT create_distributed_table('copy_default', 'id');
|
||||
create_distributed_table
|
||||
---------------------------------------------------------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
-- if DEFAULT is not specified, then the marker will be regular data
|
||||
COPY copy_default FROM stdin;
|
||||
SELECT * FROM copy_default ORDER BY id;
|
||||
id | text_value | ts_value
|
||||
---------------------------------------------------------------------
|
||||
1 | value | Mon Jul 04 00:00:00 2022
|
||||
2 | D | Tue Jul 05 00:00:00 2022
|
||||
(2 rows)
|
||||
|
||||
TRUNCATE copy_default;
|
||||
COPY copy_default FROM stdin WITH (format csv);
|
||||
SELECT * FROM copy_default ORDER BY id;
|
||||
id | text_value | ts_value
|
||||
---------------------------------------------------------------------
|
||||
1 | value | Mon Jul 04 00:00:00 2022
|
||||
2 | \D | Tue Jul 05 00:00:00 2022
|
||||
(2 rows)
|
||||
|
||||
TRUNCATE copy_default;
|
||||
-- DEFAULT cannot be used in binary mode
|
||||
COPY copy_default FROM stdin WITH (format binary, default '\D');
|
||||
ERROR: cannot specify DEFAULT in BINARY mode
|
||||
-- DEFAULT cannot be new line nor carriage return
|
||||
COPY copy_default FROM stdin WITH (default E'\n');
|
||||
ERROR: COPY default representation cannot use newline or carriage return
|
||||
COPY copy_default FROM stdin WITH (default E'\r');
|
||||
ERROR: COPY default representation cannot use newline or carriage return
|
||||
-- DELIMITER cannot appear in DEFAULT spec
|
||||
COPY copy_default FROM stdin WITH (delimiter ';', default 'test;test');
|
||||
ERROR: COPY delimiter must not appear in the DEFAULT specification
|
||||
-- CSV quote cannot appear in DEFAULT spec
|
||||
COPY copy_default FROM stdin WITH (format csv, quote '"', default 'test"test');
|
||||
ERROR: CSV quote character must not appear in the DEFAULT specification
|
||||
-- NULL and DEFAULT spec must be different
|
||||
COPY copy_default FROM stdin WITH (default '\N');
|
||||
ERROR: NULL specification and DEFAULT specification cannot be the same
|
||||
-- cannot use DEFAULT marker in column that has no DEFAULT value
|
||||
COPY copy_default FROM stdin WITH (default '\D');
|
||||
ERROR: unexpected default marker in COPY data
|
||||
DETAIL: Column "id" has no default value.
|
||||
CONTEXT: COPY copy_default, line 1: "\D value '2022-07-04'"
|
||||
COPY copy_default FROM stdin WITH (format csv, default '\D');
|
||||
ERROR: unexpected default marker in COPY data
|
||||
DETAIL: Column "id" has no default value.
|
||||
CONTEXT: COPY copy_default, line 1: "\D,value,2022-07-04"
|
||||
-- The DEFAULT marker must be unquoted and unescaped or it's not recognized
|
||||
COPY copy_default FROM stdin WITH (default '\D');
|
||||
SELECT * FROM copy_default ORDER BY id;
|
||||
id | text_value | ts_value
|
||||
---------------------------------------------------------------------
|
||||
1 | test | Mon Jul 04 00:00:00 2022
|
||||
2 | \D | Mon Jul 04 00:00:00 2022
|
||||
3 | "D" | Mon Jul 04 00:00:00 2022
|
||||
(3 rows)
|
||||
|
||||
TRUNCATE copy_default;
|
||||
COPY copy_default FROM stdin WITH (format csv, default '\D');
|
||||
SELECT * FROM copy_default ORDER BY id;
|
||||
id | text_value | ts_value
|
||||
---------------------------------------------------------------------
|
||||
1 | test | Mon Jul 04 00:00:00 2022
|
||||
2 | \\D | Mon Jul 04 00:00:00 2022
|
||||
3 | \D | Mon Jul 04 00:00:00 2022
|
||||
(3 rows)
|
||||
|
||||
TRUNCATE copy_default;
|
||||
-- successful usage of DEFAULT option in COPY
|
||||
COPY copy_default FROM stdin WITH (default '\D');
|
||||
SELECT * FROM copy_default ORDER BY id;
|
||||
id | text_value | ts_value
|
||||
---------------------------------------------------------------------
|
||||
1 | value | Mon Jul 04 00:00:00 2022
|
||||
2 | test | Sun Jul 03 00:00:00 2022
|
||||
3 | test | Tue Jul 05 00:00:00 2022
|
||||
(3 rows)
|
||||
|
||||
TRUNCATE copy_default;
|
||||
COPY copy_default FROM stdin WITH (format csv, default '\D');
|
||||
SELECT * FROM copy_default ORDER BY id;
|
||||
id | text_value | ts_value
|
||||
---------------------------------------------------------------------
|
||||
1 | value | Mon Jul 04 00:00:00 2022
|
||||
2 | test | Sun Jul 03 00:00:00 2022
|
||||
3 | test | Tue Jul 05 00:00:00 2022
|
||||
(3 rows)
|
||||
|
||||
TRUNCATE copy_default;
|
||||
\c - - - :worker_1_port
|
||||
COPY pg16.copy_default FROM stdin WITH (format csv, default '\D');
|
||||
SELECT * FROM pg16.copy_default ORDER BY id;
|
||||
id | text_value | ts_value
|
||||
---------------------------------------------------------------------
|
||||
1 | value | Mon Jul 04 00:00:00 2022
|
||||
2 | test | Sun Jul 03 00:00:00 2022
|
||||
3 | test | Tue Jul 05 00:00:00 2022
|
||||
(3 rows)
|
||||
|
||||
\c - - - :master_port
|
||||
TRUNCATE pg16.copy_default;
|
||||
\c - - - :worker_2_port
|
||||
COPY pg16.copy_default FROM stdin WITH (format csv, default '\D');
|
||||
SELECT * FROM pg16.copy_default ORDER BY id;
|
||||
id | text_value | ts_value
|
||||
---------------------------------------------------------------------
|
||||
1 | value | Mon Jul 04 00:00:00 2022
|
||||
2 | test | Sun Jul 03 00:00:00 2022
|
||||
3 | test | Tue Jul 05 00:00:00 2022
|
||||
(3 rows)
|
||||
|
||||
\c - - - :master_port
|
||||
SET search_path TO pg16;
|
||||
SET citus.shard_count TO 1;
|
||||
SET citus.shard_replication_factor TO 1;
|
||||
-- DEFAULT cannot be used in COPY TO
|
||||
COPY (select 1 as test) TO stdout WITH (default '\D');
|
||||
ERROR: COPY DEFAULT only available using COPY FROM
|
||||
-- Tests for SQL/JSON: support the IS JSON predicate
|
||||
-- Relevant PG commit:
|
||||
-- https://github.com/postgres/postgres/commit/6ee30209
|
||||
|
|
|
@ -104,6 +104,121 @@ SELECT result FROM run_command_on_all_nodes
|
|||
SELECT create_distributed_table('test_storage', 'a');
|
||||
ALTER TABLE test_storage ALTER a SET STORAGE default;
|
||||
|
||||
--
|
||||
-- COPY FROM ... DEFAULT
|
||||
-- Already supported in Citus, adding all PG tests with a distributed table
|
||||
-- Relevant PG commit:
|
||||
-- https://github.com/postgres/postgres/commit/9f8377f
|
||||
CREATE TABLE copy_default (
|
||||
id integer PRIMARY KEY,
|
||||
text_value text NOT NULL DEFAULT 'test',
|
||||
ts_value timestamp without time zone NOT NULL DEFAULT '2022-07-05'
|
||||
);
|
||||
SELECT create_distributed_table('copy_default', 'id');
|
||||
|
||||
-- if DEFAULT is not specified, then the marker will be regular data
|
||||
COPY copy_default FROM stdin;
|
||||
1 value '2022-07-04'
|
||||
2 \D '2022-07-05'
|
||||
\.
|
||||
SELECT * FROM copy_default ORDER BY id;
|
||||
TRUNCATE copy_default;
|
||||
|
||||
COPY copy_default FROM stdin WITH (format csv);
|
||||
1,value,2022-07-04
|
||||
2,\D,2022-07-05
|
||||
\.
|
||||
SELECT * FROM copy_default ORDER BY id;
|
||||
TRUNCATE copy_default;
|
||||
|
||||
-- DEFAULT cannot be used in binary mode
|
||||
COPY copy_default FROM stdin WITH (format binary, default '\D');
|
||||
|
||||
-- DEFAULT cannot be new line nor carriage return
|
||||
COPY copy_default FROM stdin WITH (default E'\n');
|
||||
COPY copy_default FROM stdin WITH (default E'\r');
|
||||
|
||||
-- DELIMITER cannot appear in DEFAULT spec
|
||||
COPY copy_default FROM stdin WITH (delimiter ';', default 'test;test');
|
||||
|
||||
-- CSV quote cannot appear in DEFAULT spec
|
||||
COPY copy_default FROM stdin WITH (format csv, quote '"', default 'test"test');
|
||||
|
||||
-- NULL and DEFAULT spec must be different
|
||||
COPY copy_default FROM stdin WITH (default '\N');
|
||||
|
||||
-- cannot use DEFAULT marker in column that has no DEFAULT value
|
||||
COPY copy_default FROM stdin WITH (default '\D');
|
||||
\D value '2022-07-04'
|
||||
2 \D '2022-07-05'
|
||||
\.
|
||||
|
||||
COPY copy_default FROM stdin WITH (format csv, default '\D');
|
||||
\D,value,2022-07-04
|
||||
2,\D,2022-07-05
|
||||
\.
|
||||
|
||||
-- The DEFAULT marker must be unquoted and unescaped or it's not recognized
|
||||
COPY copy_default FROM stdin WITH (default '\D');
|
||||
1 \D '2022-07-04'
|
||||
2 \\D '2022-07-04'
|
||||
3 "\D" '2022-07-04'
|
||||
\.
|
||||
SELECT * FROM copy_default ORDER BY id;
|
||||
TRUNCATE copy_default;
|
||||
|
||||
COPY copy_default FROM stdin WITH (format csv, default '\D');
|
||||
1,\D,2022-07-04
|
||||
2,\\D,2022-07-04
|
||||
3,"\D",2022-07-04
|
||||
\.
|
||||
SELECT * FROM copy_default ORDER BY id;
|
||||
TRUNCATE copy_default;
|
||||
|
||||
-- successful usage of DEFAULT option in COPY
|
||||
COPY copy_default FROM stdin WITH (default '\D');
|
||||
1 value '2022-07-04'
|
||||
2 \D '2022-07-03'
|
||||
3 \D \D
|
||||
\.
|
||||
SELECT * FROM copy_default ORDER BY id;
|
||||
TRUNCATE copy_default;
|
||||
|
||||
COPY copy_default FROM stdin WITH (format csv, default '\D');
|
||||
1,value,2022-07-04
|
||||
2,\D,2022-07-03
|
||||
3,\D,\D
|
||||
\.
|
||||
SELECT * FROM copy_default ORDER BY id;
|
||||
TRUNCATE copy_default;
|
||||
|
||||
\c - - - :worker_1_port
|
||||
COPY pg16.copy_default FROM stdin WITH (format csv, default '\D');
|
||||
1,value,2022-07-04
|
||||
2,\D,2022-07-03
|
||||
3,\D,\D
|
||||
\.
|
||||
SELECT * FROM pg16.copy_default ORDER BY id;
|
||||
|
||||
\c - - - :master_port
|
||||
TRUNCATE pg16.copy_default;
|
||||
|
||||
\c - - - :worker_2_port
|
||||
COPY pg16.copy_default FROM stdin WITH (format csv, default '\D');
|
||||
1,value,2022-07-04
|
||||
2,\D,2022-07-03
|
||||
3,\D,\D
|
||||
\.
|
||||
SELECT * FROM pg16.copy_default ORDER BY id;
|
||||
|
||||
\c - - - :master_port
|
||||
SET search_path TO pg16;
|
||||
SET citus.shard_count TO 1;
|
||||
SET citus.shard_replication_factor TO 1;
|
||||
|
||||
-- DEFAULT cannot be used in COPY TO
|
||||
COPY (select 1 as test) TO stdout WITH (default '\D');
|
||||
|
||||
-- Tests for SQL/JSON: support the IS JSON predicate
|
||||
-- Relevant PG commit:
|
||||
-- https://github.com/postgres/postgres/commit/6ee30209
|
||||
|
|
Loading…
Reference in New Issue