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

Import PostgreSQL CSV z příkazového řádku

Řešení v přijaté odpovědi bude fungovat pouze na serveru a když uživatel provádějící dotaz bude mít oprávnění číst soubor, jak je vysvětleno v této odpovědi SO.

Jinak je flexibilnějším přístupem nahradit COPY SQL pomocí příkazu psql "metapříkaz" nazvaný \copy který má všechny stejné možnosti jako "skutečné" COPY, ale je spuštěn uvnitř klienta (bez potřeby ; na konci):

psql -c "\copy tbname FROM '/tmp/the_file.csv' delimiter '|' csv"

Podle dokumentů \copy příkaz:

Provede frontendovou (klientskou) kopii. Toto je operace, která spouští příkaz SQL COPY, ale místo toho, aby server četl nebo zapisoval zadaný soubor, psql čte nebo zapisuje soubor a směruje data mezi serverem a místním systémem souborů. To znamená, že přístupnost a oprávnění k souborům patří místnímu uživateli, nikoli serveru, a nejsou vyžadována žádná oprávnění superuživatele SQL.

Kromě toho, pokud the_file.csv obsahuje záhlaví v prvním řádku, lze jej rozpoznat přidáním header na konci výše uvedeného příkazu:

psql -c "\copy tbname FROM '/tmp/the_file.csv' delimiter '|' csv header"


  1. Funkce MySQL ROUND() – Zaokrouhlí číslo na daný počet desetinných míst

  2. Trvání dat v globální dočasné tabulce?

  3. Rozdíl mezi jazykem sql a jazykem plpgsql ve funkcích PostgreSQL

  4. Příkaz Oracle insert if neexistuje