Jeg ved ikke, hvor du har den syntaks fra, men COPY tager ikke sådan en liste over kolonnealiaser. Se hjælpen:
COPY table_name [ ( column_name [, ...] ) ]
FROM { 'filename' | PROGRAM 'command' | STDIN }
[ [ WITH ] ( option [, ...] ) ]
(AS er ikke en af de angivne muligheder; for at se den fulde outputkørsel \d copy i psql, eller se i manualen for copy kommando online).
Der er ingen kortlægningsfunktion i COPY der kun lader dig læse nogle kolonner i input CSV. Det ville være rigtig nyttigt, men ingen har haft tid/interesse/finansiering til at implementere det endnu. Det er i virkeligheden kun én af mange datatransformations-/filtreringsopgaver, som folk ønsker.
PostgreSQL forventer kolonnelisten angivet i COPY at være i samme rækkefølge, fra venstre mod højre, som det, der er i CSV-filen, og have det samme antal poster, som CSV-filen har kolonner. Så hvis du skriver:
COPY con (date,kgs)
så forventer PostgreSQL en input-CSV med præcis to kolonner . Den bruger den første csv-kolonne til "date" tabelkolonne og den anden csv-kolonne for "kgs" tabel kolonne. Det er ligeglad med, hvad CSV-headerne er, de ignoreres, hvis du angiver WITH (FORMAT CSV, HEADER ON) , eller behandlet som normale datarækker, hvis du ikke angiver HEADER .
PostgreSQL 9.4 tilføjer FROM PROGRAM til COPY , så du kan køre en shell-kommando for at læse filen og filtrere den. Et simpelt Python- eller Perl-script ville gøre jobbet.
Hvis det er en lille fil, skal du blot åbne en kopi i regnearket efter eget valg som en csv-fil, slette de uønskede kolonner og gemme den, så kun date og kgs kolonner forbliver.
Alternativt COPY til en iscenesættelsestabel, der har alle de samme kolonner som CSV , og lav derefter en INSERT INTO ... SELECT at overføre netop de ønskede data til den rigtige måltabel.