diff options
author | Peter Eisentraut <peter@eisentraut.org> | 2022-03-30 08:56:58 +0200 |
---|---|---|
committer | Peter Eisentraut <peter@eisentraut.org> | 2022-03-30 09:02:31 +0200 |
commit | 072132f04e55c1c3b0f1a582318da78de7334379 (patch) | |
tree | d855c0b1716968cd26966e34f41f77de0c0d0af6 /src/include/commands/copy.h | |
parent | edcedcc2c7bb8390858bbccda9637318598f2473 (diff) |
Add header matching mode to COPY FROM
COPY FROM supports the HEADER option to silently discard the header
line from a CSV or text file. It is possible to load by mistake a
file that matches the expected format, for example, if two text
columns have been swapped, resulting in garbage in the database.
This adds a new option value HEADER MATCH that checks the column names
in the header line against the actual column names and errors out if
they do not match.
Author: Rémi Lapeyre <remi.lapeyre@lenstra.fr>
Reviewed-by: Daniel Verite <daniel@manitou-mail.org>
Reviewed-by: Peter Eisentraut <peter.eisentraut@enterprisedb.com>
Discussion: https://www.postgresql.org/message-id/flat/CAF1-J-0PtCWMeLtswwGV2M70U26n4g33gpe1rcKQqe6wVQDrFA@mail.gmail.com
Diffstat (limited to 'src/include/commands/copy.h')
-rw-r--r-- | src/include/commands/copy.h | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/include/commands/copy.h b/src/include/commands/copy.h index 8694da5004c..cb0096aeb67 100644 --- a/src/include/commands/copy.h +++ b/src/include/commands/copy.h @@ -20,6 +20,17 @@ #include "tcop/dest.h" /* + * Represents whether a header line should be present, and whether it must + * match the actual names (which implies "true"). + */ +typedef enum CopyHeaderChoice +{ + COPY_HEADER_FALSE = 0, + COPY_HEADER_TRUE, + COPY_HEADER_MATCH, +} CopyHeaderChoice; + +/* * A struct to hold COPY options, in a parsed form. All of these are related * to formatting, except for 'freeze', which doesn't really belong here, but * it's expedient to parse it along with all the other options. @@ -32,7 +43,7 @@ typedef struct CopyFormatOptions bool binary; /* binary format? */ bool freeze; /* freeze rows on loading? */ bool csv_mode; /* Comma Separated Value format? */ - bool header_line; /* header line? */ + CopyHeaderChoice header_line; /* header line? */ char *null_print; /* NULL marker string (server encoding!) */ int null_print_len; /* length of same */ char *null_print_client; /* same converted to file encoding */ |