sql >> Databáze >  >> RDS >> PostgreSQL

KOPÍROVAT pouze některé sloupce ze vstupního CSV?

Nevím, kde jsi vzal tu syntaxi, ale COPY nebere takový seznam aliasů sloupců. Viz nápověda:

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

(AS není jednou z uvedených možností; pro zobrazení celého výstupu spusťte \d copy v psql nebo se podívejte do manuálu pro copy příkaz online).

COPY neobsahuje žádné mapovací zařízení to vám umožní číst pouze některé sloupce vstupního CSV. Bylo by to opravdu užitečné, ale nikdo ještě neměl čas/zájem/finance to implementovat. Je to opravdu jen jedna z mnoha úloh transformace/filtrování dat, kterou lidé stejně chtějí.

PostgreSQL očekává seznam sloupců uvedený v COPY být ve stejném pořadí, zleva doprava, jako v souboru CSV, a mít stejný počet záznamů, jako má soubor CSV. Pokud tedy napíšete:

COPY con (date,kgs)

poté bude PostgreSQL očekávat vstupní CSV s přesně dvěma sloupci . Pro "date" použije první sloupec csv sloupec tabulky a druhý sloupec csv pro "kgs" sloupec tabulky. Nezáleží na tom, jaká jsou záhlaví CSV, budou ignorována, pokud zadáte WITH (FORMAT CSV, HEADER ON) , nebo považovány za normální datové řádky, pokud nezadáte HEADER .

PostgreSQL 9.4 přidává FROM PROGRAM COPY , takže byste mohli spustit příkaz shellu k načtení souboru a jeho filtrování. Jednoduchý skript v Pythonu nebo Perlu by to udělal.

Pokud se jedná o malý soubor, stačí otevřít kopii v tabulce dle vašeho výběru jako soubor csv, odstranit nežádoucí sloupce a uložit jej, takže pouze date a kgs sloupce zůstanou.

Případně COPY do pracovní tabulky, která má všechny stejné sloupce jako CSV a poté proveďte INSERT INTO ... SELECT přenést pouze požadovaná data do skutečné cílové tabulky.




  1. Jak mohu potvrdit, že databáze je Oracle a jakou verzi používá SQL?

  2. Jak vložit záznam do MySQL s PHP s HTML formulářem

  3. Operátor zřetězení MySQL

  4. SQLAlchemy, serializovatelná izolace transakcí a opakování v idiomatickém Pythonu