Не знам откъде имаш този синтаксис, но 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 за да прехвърлите само желаните данни в истинската целева таблица.