it-swarm-eu.dev

Exportujte vzdálenou tabulku Postgres do souboru CSV na místním počítači

Mám přístup jen pro čtení k databázi na vzdáleném serveru. Takže mohu provést:

COPY products TO '/tmp/products.csv' DELIMITER ',';

Ale na tomto serveru nemám oprávnění k vytvoření/uložení souboru, takže to musím udělat na svém místním počítači.

Když se připojím ke vzdálené databázi, jak mohu provést příkaz k uložení souboru na můj místní počítač místo vzdáleného serveru?

Nebo, jak mohu provést příkaz Linux pro připojení ke vzdálené databázi, provedení dotazu a uložení výstupu jako souboru do mého místního počítače?

18
tasmaniski

Oba již navržené přístupy se zdají být zbytečně komplikované.

Stačí použít zabudovaný příkaz psql\copy, Který funguje stejně jako server COPY na straně serveru, ale provede kopii přes drátový protokol ke klientovi a používá cesty klienta.

Protože je to příkaz psql zpětného lomítka, vynecháte koncové středník, např .:

\copy products TO '/tmp/products.csv' CSV DELIMITER ','

Viz položka \copy V manuálu pro příkaz psql a COPY příkazová dokumentace pro více podrobností.

Stejně jako COPY můžete použít \copy S dotazem (SELECT ...) Namísto názvu tabulky při kopírování dat (ale nikoli v).


Obecně nižší alternativou, která může být užitečná v několika omezených situacích, je použití:

psql -t -P format=unaligned -P fieldsep_zero=on -c 'SELECT * FROM tablename'

a pomocí příznaku -o nebo přesměrování výstupu Shell zapište výstup do souboru. Téměř vždy byste měli použít \copy.

30
Craig Ringer

Příkaz Linux je:

psql -h 127.0.0.1 -U username -o file.csv -c 'select id, name from clients;'
2
tasmaniski