patternsqlModerate
Does the PostgreSQL COPY command have the option of choosing which fields to map the CSV columns to?
Viewed 0 times
postgresqlmapthecolumnsfieldscsvoptiondoeswhichcommand
Problem
Does the PostgreSQL
The PostgreSQL
Is there some alternative command that enables that?
COPY command have the option of choosing which fields to map the CSV columns to?The PostgreSQL
COPY command appears to expect that the target table matches its columns exactly. Am I missing something or is that how it actually works?Is there some alternative command that enables that?
Solution
It is absolutely possible - the ever helpful documentation comes to the rescue, again:
Which means you can do something like this:
What you cannot do is to refer columns of the CSV file. To overcome this, one can create an intermediate table with the matching number and type of columns, do the
COPY table_name [ ( column_name [, ...] ) ]
FROM { 'filename' | PROGRAM 'command' | STDIN }
[ [ WITH ] ( option [, ...] ) ]Which means you can do something like this:
COPY my_table (mt_id, mt_name, mt_created_by, ...)
FROM 'filename' [...]What you cannot do is to refer columns of the CSV file. To overcome this, one can create an intermediate table with the matching number and type of columns, do the
COPY into it, then do an INSERT ... SELECT ... to the final destination. Based on an important remark from Patrick7, the intermediate table can be defined as UNLOGGED, saving a lot of WAL overhead when the table is big.Code Snippets
COPY table_name [ ( column_name [, ...] ) ]
FROM { 'filename' | PROGRAM 'command' | STDIN }
[ [ WITH ] ( option [, ...] ) ]COPY my_table (mt_id, mt_name, mt_created_by, ...)
FROM 'filename' [...]Context
StackExchange Database Administrators Q#132627, answer score: 17
Revisions (0)
No revisions yet.