drop table if exists copy_from_parallel_test;
NOTICE: table "copy_from_parallel_test" does not exist, skipping
drop table if exists copy_from_parallel_test1;
NOTICE: table "copy_from_parallel_test1" does not exist, skipping
create table copy_from_parallel_test(id int not null, name varchar(20));
create table copy_from_parallel_test1(id int not null, parallel varchar(20));
create table copy_from_parallel_test_eol(id int not null, name varchar(20));
----As a reference, create a basic table and export its data to copy_from_parallel_data.
----create table basic_table(id int not null, name varchar(20));
----\copy basic_table to '@abs_srcdir@/data/copy_from_parallel_data' csv;
----\copy basic_table to '@abs_srcdir@/data/copy_from_parallel_data_binary' binary;
----parallel configure in the left
\copy copy_from_parallel_test from '@abs_srcdir@/data/copy_from_parallel_data' with parallel 4 DELIMITER ',';
select count(*) from copy_from_parallel_test;
count
-------
33
(1 row)
truncate copy_from_parallel_test;
----parallel configure in the right
\copy copy_from_parallel_test from '@abs_srcdir@/data/copy_from_parallel_data' csv parallel 4;
select count(*) from copy_from_parallel_test;
count
-------
33
(1 row)
truncate copy_from_parallel_test;
----parallel configure in the middle
\copy copy_from_parallel_test from '@abs_srcdir@/data/copy_from_parallel_data' csv parallel 4 DELIMITER ',';
select count(*) from copy_from_parallel_test;
count
-------
33
(1 row)
truncate copy_from_parallel_test;
\copy copy_from_parallel_test from '@abs_srcdir@/data/copy_from_parallel_data' with parallel 2 (format 'csv', DELIMITER ',');
select count(*) from copy_from_parallel_test;
count
-------
33
(1 row)
truncate copy_from_parallel_test;
----parallel configure && transform column expr.
\copy copy_from_parallel_test from '@abs_srcdir@/data/copy_from_parallel_data' parallel 4 transform (name AS name || id) DELIMITER ',';
select count(*) from copy_from_parallel_test;
count
-------
33
(1 row)
truncate copy_from_parallel_test;
----without parallel configure
\copy copy_from_parallel_test from '@abs_srcdir@/data/copy_from_parallel_data' csv DELIMITER ',';
select count(*) from copy_from_parallel_test;
count
-------
33
(1 row)
truncate copy_from_parallel_test;
\copy copy_from_parallel_test1 from '@abs_srcdir@/data/copy_from_parallel_data' csv parallel 4 transform (parallel as parallel || id);
select count(*) from copy_from_parallel_test1;
count
-------
33
(1 row)
truncate copy_from_parallel_test1;
----add testcase for copy from parallel loss data when header true in copy options
\copy copy_from_parallel_test1 from '@abs_srcdir@/data/copy_from_parallel_data' (FORMAT 'csv',header true);
select count(*) from copy_from_parallel_test1;
count
-------
32
(1 row)
\copy copy_from_parallel_test1 from '@abs_srcdir@/data/copy_from_parallel_data' (FORMAT 'csv',header true) parallel 4;
select count(*) from copy_from_parallel_test1;
count
-------
64
(1 row)
\copy copy_from_parallel_test1 from '@abs_srcdir@/data/copy_from_parallel_data' (FORMAT 'csv',header true) parallel 4;
select count(*) from copy_from_parallel_test1;
count
-------
96
(1 row)
\copy copy_from_parallel_test1 from '@abs_srcdir@/data/copy_from_parallel_data' (FORMAT 'csv',header true) parallel 4;
select count(*) from copy_from_parallel_test1;
count
-------
128
(1 row)
truncate copy_from_parallel_test1;
\copy copy_from_parallel_test1(id, parallel) from stdin csv parallel 4
select count(*) from copy_from_parallel_test1;
count
-------
2
(1 row)
truncate copy_from_parallel_test1;
----copy with options eol
\copy copy_from_parallel_test_eol from '@abs_srcdir@/data/copy_from_parallel_data_with_eol' WITH ( format 'text',delimiter'|',eol '$');
select count(*) from copy_from_parallel_test_eol;
count
-------
4
(1 row)
\copy copy_from_parallel_test_eol from '@abs_srcdir@/data/copy_from_parallel_data_with_eol' WITH ( format 'text',delimiter'|',eol '$') parallel 2;
select count(*) from copy_from_parallel_test_eol;
count
-------
8
(1 row)
\copy copy_from_parallel_test_eol from '@abs_srcdir@/data/copy_from_parallel_data_with_eol' WITH ( format 'text',delimiter'|', eol '$') parallel 2;
select count(*) from copy_from_parallel_test_eol;
count
-------
12
(1 row)
\copy copy_from_parallel_test_eol from '@abs_srcdir@/data/copy_from_parallel_data_with_eol' WITH ( format 'text',delimiter'|', eol'$') parallel 2;
select count(*) from copy_from_parallel_test_eol;
count
-------
16
(1 row)
----parallel 0 will work, not follow parallel processes
\copy copy_from_parallel_test from '@abs_srcdir@/data/copy_from_parallel_data' csv parallel 0;
select count(*) from copy_from_parallel_test;
count
-------
33
(1 row)
truncate copy_from_parallel_test;
----abnormal cases: syntax error
\copy copy_from_parallel_test from '@abs_srcdir@/data/copy_from_parallel_data' csv paralle;
ERROR: syntax error at or near "paralle"
LINE 1: COPY copy_from_parallel_test FROM STDIN csv paralle;
^
\copy copy_from_parallel_test from '@abs_srcdir@/data/copy_from_parallel_data' csv parallel;
ERROR: syntax error at or near "parallel"
LINE 1: COPY copy_from_parallel_test FROM STDIN csv parallel;
^
\copy copy_from_parallel_test from '@abs_srcdir@/data/copy_from_parallel_data' csv parallel 4a;
\copy: parse error at "4a"
\copy copy_from_parallel_test from '@abs_srcdir@/data/copy_from_parallel_data' csv parallel -2;
\copy: parse error at "-2"
\copy copy_from_parallel_test from '@abs_srcdir@/data/copy_from_parallel_data' csv parallel 2 parallel 3;
ERROR: syntax error at or near "parallel"
LINE 1: COPY copy_from_parallel_test FROM STDIN csv parallel 3;
^
----parallel wrapped "()" will cause syntax error
\copy copy_from_parallel_test from '@abs_srcdir@/data/copy_from_parallel_data' csv (parallel 4);
ERROR: syntax error at or near "("
LINE 1: COPY copy_from_parallel_test FROM STDIN csv (parallel 4);
^
\copy copy_from_parallel_test from '@abs_srcdir@/data/copy_from_parallel_data' (csv, parallel 4);
\copy: parse error at "4)"
\copy copy_from_parallel_test from '@abs_srcdir@/data/copy_from_parallel_data' csv (parallel) 4;
ERROR: syntax error at or near "("
LINE 1: COPY copy_from_parallel_test FROM STDIN csv (parallel) 4;
^
\copy copy_from_parallel_test from '@abs_srcdir@/data/copy_from_parallel_data' csv parallel (4);
\copy: parse error at "(4)"
\copy copy_from_parallel_test from '@abs_srcdir@/data/copy_from_parallel_data' with (format 'csv', DELIMITER ',', parallel 2);
\copy: parse error at "2)"
----abnormal cases: execution error
\copy copy_from_parallel_test from '@abs_srcdir@/data/copy_from_parallel_data' parallel 4;
--?ERROR: invalid input syntax for integer: .*
--?CONTEXT: COPY copy_from_parallel_test, line 1, column id: .*
\copy copy_from_parallel_test from '@abs_srcdir@/data/copy_from_parallel_data_1' csv parallel 4;
@abs_srcdir@/data/copy_from_parallel_data_1: No such file or directory
\copy copy_from_parallel_tes from '@abs_srcdir@/data/copy_from_parallel_data' csv parallel 4;
ERROR: relation "copy_from_parallel_tes" does not exist
\copy copy_from_parallel_test from '@abs_srcdir@/data/copy_from_parallel_data' csv parallel 4 transform (names as name || id);
ERROR: column "names" of relation "copy_from_parallel_test" does not exist
\copy copy_from_parallel_test from '@abs_srcdir@/data/copy_from_parallel_data' (FORMAT 'csv',header csj) parallel 4;
ERROR: header requires a Boolean value
\copy copy_from_parallel_test from '@abs_srcdir@/data/copy_from_parallel_data' WITH (delimiter',',IGNORE_EXTRA_DATA 'on');
select count(*) from copy_from_parallel_test;
count
-------
33
(1 row)
\copy copy_from_parallel_test from '@abs_srcdir@/data/copy_from_parallel_data' WITH csv delimiter ',' ESCAPE '"';
select count(*) from copy_from_parallel_test;
count
-------
66
(1 row)
----aditional testcases
----copy from parallel in a transaction
start transaction;
create table copy_from_parallel_in_trans(id int not null, name varchar(20));
\copy copy_from_parallel_in_trans from '@abs_srcdir@/data/copy_from_parallel_data' csv parallel 4;
select count(*) from copy_from_parallel_in_trans;
count
-------
33
(1 row)
commit;
drop table copy_from_parallel_in_trans;
drop table copy_from_parallel_test;
drop table copy_from_parallel_test1;
drop table copy_from_parallel_test_eol;
----temp table
create temp table copy_from_parallel_tmp(id int not null, name varchar(20));
\copy copy_from_parallel_tmp from '@abs_srcdir@/data/copy_from_parallel_data' csv parallel 4;
select count(*) from copy_from_parallel_tmp;
count
-------
33
(1 row)
drop table copy_from_parallel_tmp;
--binary file
create table copy_from_parallel_binary(id int not null, name varchar(20));
\copy copy_from_parallel_binary from '@abs_srcdir@/data/copy_from_parallel_data_binary' binary parallel 4;
select count(*) from copy_from_parallel_binary;
count
-------
4
(1 row)
drop table copy_from_parallel_binary;
----copy from parallel when change schema
create schema copy_from_parallel;
set current_schema = copy_from_parallel;
create table copy_from_parallel_schema(id int not null, name varchar(20));
\copy copy_from_parallel_schema from '@abs_srcdir@/data/copy_from_parallel_data' csv parallel 4;
select count(*) from copy_from_parallel_schema;
count
-------
33
(1 row)
drop table copy_from_parallel_schema;
drop schema copy_from_parallel;
create schema copy_from_parallel;
set search_path to copy_from_parallel;
create table copy_from_parallel_schema(id int not null, name varchar(20));
\copy copy_from_parallel_schema from '@abs_srcdir@/data/copy_from_parallel_data' csv parallel 4;
select count(*) from copy_from_parallel_schema;
count
-------
33
(1 row)
drop table copy_from_parallel_schema;
drop schema copy_from_parallel;