| -- |
| -- Test cases for COPY (select) TO |
| -- |
| create table copyselect_test1 (id serial, t text); |
| NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'id' 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. |
| insert into copyselect_test1 (t) values ('a'); |
| insert into copyselect_test1 (t) values ('b'); |
| insert into copyselect_test1 (t) values ('c'); |
| insert into copyselect_test1 (t) values ('d'); |
| insert into copyselect_test1 (t) values ('e'); |
| create table copyselect_test2 (id serial, t text); |
| NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'id' 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. |
| insert into copyselect_test2 (t) values ('A'); |
| insert into copyselect_test2 (t) values ('B'); |
| insert into copyselect_test2 (t) values ('C'); |
| insert into copyselect_test2 (t) values ('D'); |
| insert into copyselect_test2 (t) values ('E'); |
| create view v_copyselect_test1 |
| as select 'v_'||t from copyselect_test1; |
| -- |
| -- Test COPY table TO |
| -- |
| copy copyselect_test1 to stdout; |
| 1 a |
| 2 b |
| 3 c |
| 4 d |
| 5 e |
| -- |
| -- This should fail |
| -- |
| copy v_copyselect_test1 to stdout; |
| ERROR: cannot copy from view "v_copyselect_test1" |
| HINT: Try the COPY (SELECT ...) TO variant. |
| -- |
| -- Test COPY (select) TO |
| -- |
| copy (select t from copyselect_test1 where id=1) to stdout; |
| a |
| -- |
| -- Test COPY (select for update) TO |
| -- |
| copy (select t from copyselect_test1 where id=3 for update) to stdout; |
| c |
| -- |
| -- This should fail |
| -- |
| copy (select t into temp test3 from copyselect_test1 where id=3) to stdout; |
| ERROR: COPY (SELECT INTO) is not supported |
| -- |
| -- This should fail |
| -- |
| copy (select * from copyselect_test1) from stdin; |
| ERROR: syntax error at or near "from" |
| LINE 1: copy (select * from copyselect_test1) from stdin; |
| ^ |
| -- |
| -- This should fail |
| -- |
| copy (select * from copyselect_test1) (t,id) to stdout; |
| ERROR: syntax error at or near "(" |
| LINE 1: copy (select * from copyselect_test1) (t,id) to stdout; |
| ^ |
| -- |
| -- Test JOIN |
| -- |
| copy (select * from copyselect_test1 join copyselect_test2 using (id)) to stdout; |
| 1 a A |
| 2 b B |
| 3 c C |
| 4 d D |
| 5 e E |
| -- |
| -- Test UNION SELECT |
| -- |
| copy (select t from copyselect_test1 where id = 1 UNION select * from v_copyselect_test1 ORDER BY 1) to stdout; |
| a |
| v_a |
| v_b |
| v_c |
| v_d |
| v_e |
| -- |
| -- Test subselect |
| -- |
| copy (select * from (select t from copyselect_test1 where id = 1 UNION select * from v_copyselect_test1) t1 ORDER BY 1) to stdout; |
| a |
| v_a |
| v_b |
| v_c |
| v_d |
| v_e |
| -- |
| -- Test headers, CSV and quotes |
| -- |
| copy (select t from copyselect_test1 where id = 1) to stdout csv header force quote t; |
| t |
| "a" |
| -- |
| -- Test psql builtins, plain table |
| -- |
| \copy copyselect_test1 to stdout |
| 1 a |
| 2 b |
| 3 c |
| 4 d |
| 5 e |
| -- |
| -- This should fail |
| -- |
| \copy v_copyselect_test1 to stdout |
| ERROR: cannot copy from view "v_copyselect_test1" |
| HINT: Try the COPY (SELECT ...) TO variant. |
| -- |
| -- Test \copy (select ...) |
| -- |
| \copy (select "id",'id','id""'||t,(id + 1)*id,t,"copyselect_test1"."t" from copyselect_test1 where id=3) to stdout |
| 3 id id""c 12 c c |
| -- |
| -- Drop everything |
| -- |
| drop table copyselect_test2; |
| drop view v_copyselect_test1; |
| drop table copyselect_test1; |
| -- psql handling of COPY in multi-command strings |
| copy (select 1) to stdout\; select 1/0; -- row, then error |
| 1 |
| ERROR: division by zero |
| select 1/0\; copy (select 1) to stdout; -- error only |
| ERROR: division by zero |
| copy (select 1) to stdout\; copy (select 2) to stdout\; select 3\; select 4; -- 1 2 3 4 |
| 1 |
| 2 |
| ?column? |
| ---------- |
| 3 |
| (1 row) |
| |
| ?column? |
| ---------- |
| 4 |
| (1 row) |
| |
| create table test3 (c int); |
| select 0\; copy test3 from stdin\; copy test3 from stdin\; select 1; -- 0 1 |
| ?column? |
| ---------- |
| 0 |
| (1 row) |
| |
| ?column? |
| ---------- |
| 1 |
| (1 row) |
| |
| select * from test3; |
| c |
| --- |
| 1 |
| 2 |
| (2 rows) |
| |
| drop table test3; |