Jsem si jistý, že každý z nás se někdy dostal do situace, kdy potřeboval vygenerovat sestavu a/nebo získat nějaká data z databáze a prezentovat je v tabulce. V mnoha případech naši klienti dávají přednost Excelu, aby zpracovávali tabulky/reporty, protože, duh, je to Excel.

Jak tedy k tomuto problému přistupujete? Kopírujete a vkládáte data? Nebo použijete grafické rozhraní RDBMS k vygenerování sestavy do tabulky? Dnes vám ukážu opravdu malou, ale praktickou funkci PostgreSQL -COPY.

Dobrý den, COPY#

Z dokumentace COPY: „COPY přesouvá data mezi tabulkami PostgreSQL a soubory standardního souborového systému. COPY TO kopíruje obsah tabulky do souboru, zatímcoCOPY FROM kopíruje data ze souboru do tabulky (připojuje data k tomu, co už v tabulce je). COPY TO může také kopírovat výsledky dotazu SELECT.“

Co tedy COPY dělá:

  1. Může kopírovat obsah souboru (data) do tabulky nebo
  2. Může kopírovat obsah tabulky (nebo výsledek dotazu SELECT) do souboru.

Je-li zadán seznam sloupců, COPY zkopíruje do souboru nebo ze souboru pouze data v zadaných sloupcích. Pokud jsou v tabulce nějaké sloupce, které nejsou v seznamu sloupců, COPY FROM vloží do těchto sloupců výchozí hodnoty.

COPY s názvem souboru dává serveru PostgreSQL pokyn k přímému čtení ze souboru nebo zápisu do souboru. Soubor musí být serveru přístupný a jeho název musí být zadán z pohledu serveru. Pokud je zadáno STDIN nebo STDOUT, jsou data přenášena prostřednictvím spojení mezi klientem a serverem.

Zní to dobře? Pojďme to vyzkoušet!

Upozornění: COPY má schopnost číst/zapisovat data z/do CSV a binárních souborů. Ačkoli jsem si jistý, že existuje spousta případů použití pro binární soubory, vtomto blogpostu se zaměřím pouze na použití pro soubory CSV, protože pro mě osobně jsou nejvhodnější pro předávání souborů dat.

COPY TO#

Když chcete z dotazu SELECT vytvořit soubor CSV nebo vypsat celý obsah tabulky do souboru CSV, můžete použít příkaz „COPY … TO …“.

Použití dotazu SELECT#

Pokud chcete zkopírovat množinu výsledků do souboru CSV, formát příkazu COPY je:

1
COPY (<select-query-here>) TO <file-path>;

Nebo reálnější příklad:

1
COPY (SELECT * FROM people WHERE age > 21) TO '~/Desktop/adults.csv';

Jak vidíte, používáme příkaz COPY, který zkopíruje výsledky do CSV souboru na lokálním souborovém systému. Dotaz můžete posunout mnohem dále. Zde je příklad ze života projektu, na kterém právě pracuji:

1
COPY (SELECT price_rules.* FROM quotes LEFT JOIN price_rules ON quotes.id = price_rules.chargeable_id where quotes.id = 437) TO '~/Desktop/exports/price_rules.csv' CSV;

Jak vidíte, můžete použít jakýkoli dotaz SELECT, který může vrátit sadu výsledků dat. ale, co by to bylo za CSV bez hlaviček, že? 🙂

1
COPY (SELECT * FROM people WHERE age > 21) TO '~/Desktop/adults.csv' CSV HEADER;

Přidáním klíčového slova HEADER na konec zahrnete do souboru CSV hlavičky,což jsou názvy sloupců tabulky.

Další klíčovou vlastností souborů CSV jsou oddělovače. V závislosti na tom, jaký znakový oddělovač chcete, aby soubor CSV měl, můžete v příkazu zadat znak:

1
COPY (SELECT * FROM people WHERE age > 21) TO '~/Desktop/adults.csv' CSV DELIMITER ',' HEADER;

Použití názvu tabulky#

Pokud chcete do CSV vypsat celou tabulku, je příkaz opravdujednodušší. Stačí zadat název tabulky a cílový soubor:

1
COPY people TO '~/Desktop/people.csv' CSV DELIMITER ',' HEADER;

To je vše.

COPY FROM#

Nyní, když chcete data ze souboru CSV vložit do tabulky, můžetepoužít příkaz „COPY &mldr; FROM &mldr;“. Syntaxe je velmi podobná, pouze s jednímklíčovým rozdílem:

1
COPY <table-name> FROM <file-path> DELIMITER ',' CSV HEADER;

Nebo na reálném příkladu:

1
COPY addresses FROM '~/Desktop/addresses.csv' DELIMITER ',' CSV HEADER;

Outro#

COPY je opravdu šikovná a skvělá funkce systému Postgres. Pro brewity jsem se snažil, aby byl tento blogpost krátký a jednoduchý. Pokud máte nějaké myšlenky a dotazy, neváhejte mi napsat komentář. Nebo, pokud se necítíte upovídaní, můžete zamířit do dokumentace COPY.

Líbil se vám tento článek? Přihlaste se k odběru mého zpravodaje a dostávejte mé čerstvé příspěvky do schránky. Je krátký a sladký a každý měsíc ho dostává více než 1 000 odběratelů.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.