Не знам откъде имаш този синтаксис, но COPY
не приема списък с псевдоними на колони като този. Вижте помощта:
COPY table_name [ ( column_name [, ...] ) ]
FROM { 'filename' | PROGRAM 'command' | STDIN }
[ [ WITH ] ( option [, ...] ) ]
(AS
не е една от изброените опции; за да видите пълния изход, изпълнете \d copy
в psql или погледнете ръководството за copy
команда онлайн).
Няма възможност за картографиране в COPY
което ви позволява да четете само някои колони от входния CSV. Би било наистина полезно, но все още никой не е имал време/интерес/финансиране да го приложи. Това наистина е само една от многото задачи за преобразуване/филтриране на данни, които хората така или иначе искат.
PostgreSQL очаква списъка с колони, даден в COPY
да бъде в същия ред, отляво надясно, като това, което е в CSV файла, и да има същия брой записи, тъй като CSV файлът има колони. Така че, ако напишете:
COPY con (date,kgs)
тогава PostgreSQL ще очаква въведен CSV с точно две колони . Ще използва първата CSV колона за "date"
колона на таблицата и втората csv колона за "kgs"
колона на таблицата. Няма значение какви са CSV заглавките, те се игнорират, ако посочите WITH (FORMAT CSV, HEADER ON)
, или се третират като нормални редове с данни, ако не посочите HEADER
.
PostgreSQL 9.4 добавя FROM PROGRAM
за COPY
, така че можете да изпълните команда на shell, за да прочетете файла и да го филтрирате. Прост скрипт на Python или Perl ще свърши работа.
Ако е малък файл, просто отворете копие в електронната таблица по ваш избор като csv файл, изтрийте нежеланите колони и го запазете, така че само date
и kgs
остават колони.
Алтернативно, COPY
към междинна таблица, която има всички същите колони като CSV
, след което направете INSERT INTO ... SELECT
за да прехвърлите само желаните данни в истинската целева таблица.