mirror of
https://github.com/postgres/postgres.git
synced 2025-12-19 17:02:53 +03:00
Support multi-line headers in COPY FROM command.
The COPY FROM command now accepts a non-negative integer for the HEADER option, allowing multiple header lines to be skipped. This is useful when the input contains multi-line headers that should be ignored during data import. Author: Shinya Kato <shinya11.kato@gmail.com> Co-authored-by: Fujii Masao <masao.fujii@gmail.com> Reviewed-by: Yugo Nagata <nagata@sraoss.co.jp> Discussion: https://postgr.es/m/CAOzEurRPxfzbxqeOPF_AGnAUOYf=Wk0we+1LQomPNUNtyZGBZw@mail.gmail.com
This commit is contained in:
@@ -81,6 +81,29 @@ copy copytest4 to stdout (header);
|
||||
c1 colname with tab: \t
|
||||
1 a
|
||||
2 b
|
||||
-- test multi-line header line feature
|
||||
create temp table copytest5 (c1 int);
|
||||
copy copytest5 from stdin (format csv, header 2);
|
||||
copy copytest5 to stdout (header);
|
||||
c1
|
||||
1
|
||||
2
|
||||
truncate copytest5;
|
||||
copy copytest5 from stdin (format csv, header 4);
|
||||
select count(*) from copytest5;
|
||||
count
|
||||
-------
|
||||
0
|
||||
(1 row)
|
||||
|
||||
truncate copytest5;
|
||||
copy copytest5 from stdin (format csv, header 5);
|
||||
select count(*) from copytest5;
|
||||
count
|
||||
-------
|
||||
0
|
||||
(1 row)
|
||||
|
||||
-- test copy from with a partitioned table
|
||||
create table parted_copytest (
|
||||
a int,
|
||||
@@ -224,7 +247,7 @@ alter table header_copytest add column c text;
|
||||
copy header_copytest to stdout with (header match);
|
||||
ERROR: cannot use "match" with HEADER in COPY TO
|
||||
copy header_copytest from stdin with (header wrong_choice);
|
||||
ERROR: header requires a Boolean value or "match"
|
||||
ERROR: header requires a Boolean value, a non-negative integer, or the string "match"
|
||||
-- works
|
||||
copy header_copytest from stdin with (header match);
|
||||
copy header_copytest (c, a, b) from stdin with (header match);
|
||||
|
||||
@@ -132,6 +132,12 @@ COPY x from stdin with (reject_limit 1);
|
||||
ERROR: COPY REJECT_LIMIT requires ON_ERROR to be set to IGNORE
|
||||
COPY x from stdin with (on_error ignore, reject_limit 0);
|
||||
ERROR: REJECT_LIMIT (0) must be greater than zero
|
||||
COPY x from stdin with (header -1);
|
||||
ERROR: a negative integer value cannot be specified for header
|
||||
COPY x from stdin with (header 2.5);
|
||||
ERROR: header requires a Boolean value, a non-negative integer, or the string "match"
|
||||
COPY x to stdout with (header 2);
|
||||
ERROR: cannot use multi-line header in COPY TO
|
||||
-- too many columns in column list: should fail
|
||||
COPY x (a, b, c, d, e, d, c) from stdin;
|
||||
ERROR: column "d" specified more than once
|
||||
|
||||
@@ -94,6 +94,36 @@ this is just a line full of junk that would error out if parsed
|
||||
|
||||
copy copytest4 to stdout (header);
|
||||
|
||||
-- test multi-line header line feature
|
||||
|
||||
create temp table copytest5 (c1 int);
|
||||
|
||||
copy copytest5 from stdin (format csv, header 2);
|
||||
this is a first header line.
|
||||
this is a second header line.
|
||||
1
|
||||
2
|
||||
\.
|
||||
copy copytest5 to stdout (header);
|
||||
|
||||
truncate copytest5;
|
||||
copy copytest5 from stdin (format csv, header 4);
|
||||
this is a first header line.
|
||||
this is a second header line.
|
||||
1
|
||||
2
|
||||
\.
|
||||
select count(*) from copytest5;
|
||||
|
||||
truncate copytest5;
|
||||
copy copytest5 from stdin (format csv, header 5);
|
||||
this is a first header line.
|
||||
this is a second header line.
|
||||
1
|
||||
2
|
||||
\.
|
||||
select count(*) from copytest5;
|
||||
|
||||
-- test copy from with a partitioned table
|
||||
create table parted_copytest (
|
||||
a int,
|
||||
|
||||
@@ -90,6 +90,9 @@ COPY x to stdout (format BINARY, on_error unsupported);
|
||||
COPY x from stdin (log_verbosity unsupported);
|
||||
COPY x from stdin with (reject_limit 1);
|
||||
COPY x from stdin with (on_error ignore, reject_limit 0);
|
||||
COPY x from stdin with (header -1);
|
||||
COPY x from stdin with (header 2.5);
|
||||
COPY x to stdout with (header 2);
|
||||
|
||||
-- too many columns in column list: should fail
|
||||
COPY x (a, b, c, d, e, d, c) from stdin;
|
||||
|
||||
Reference in New Issue
Block a user