sql >> Databasteknik >  >> RDS >> PostgreSQL

KOPIERA bara några kolumner från en indata-CSV?

Jag vet inte var du fick den syntaxen, men COPY tar inte en lista med sådana kolumnalias. Se hjälpen:

COPY table_name [ ( column_name [, ...] ) ]
    FROM { 'filename' | PROGRAM 'command' | STDIN }
    [ [ WITH ] ( option [, ...] ) ]

(AS är inte ett av de listade alternativen; för att se hela utdatakörningen \d copy i psql, eller titta i manualen för copy kommando online).

Det finns ingen mappningsmöjlighet i COPY som låter dig läsa endast vissa kolumner i inmatnings-CSV-filen. Det skulle vara riktigt användbart, men ingen har haft tid/intresse/finansiering för att implementera det ännu. Det är egentligen bara en av många datatransformerings-/filtreringsuppgifter som folk vill ha.

PostgreSQL förväntar sig kolumnlistan som ges i COPY att vara i samma ordning, från vänster till höger, som det som finns i CSV-filen, och ha samma antal poster som CSV-filen har kolumner. Så om du skriver:

COPY con (date,kgs)

då kommer PostgreSQL att förvänta sig en indata-CSV med exakt två kolumner . Den kommer att använda den första csv-kolumnen för "date" tabellkolumnen och den andra csv-kolumnen för "kgs" tabell kolumn. Det bryr sig inte om vilka CSV-rubriker är, de ignoreras om du anger WITH (FORMAT CSV, HEADER ON) , eller behandlas som normala datarader om du inte anger HEADER .

PostgreSQL 9.4 lägger till FROM PROGRAM till COPY , så att du kan köra ett skalkommando för att läsa filen och filtrera den. Ett enkelt Python- eller Perl-skript skulle göra jobbet.

Om det är en liten fil öppnar du bara en kopia i valfritt kalkylark som en csv-fil, tar bort de oönskade kolumnerna och sparar den, så bara date och kgs kolumner kvar.

Alternativt COPY till en mellanställningstabell som har alla samma kolumner som CSV , gör sedan en INSERT INTO ... SELECT för att överföra bara önskad data till den verkliga måltabellen.




  1. Hälsokontroll av Exadata med hjälp av Exachk Utility

  2. starta om mysql-servern på windows 7

  3. MySQL Group By och bracketing enligt ålder

  4. Maximal SQLite-databasstorlek i Android-applikation