Nagyon biztos vagyok benne, hogy mindenki volt már olyan helyzetben, amikor szükség volt egy jelentés létrehozására és/vagy adatok kinyerésére egy adatbázisból, és azok bemutatására egy táblázatban. Sok esetben az ügyfeleink inkább az Excel-t részesítik előnyben a táblázatok/jelentések kezelésében, mert, duh, ez az Excel.

Szóval, hogyan közelíti meg ezt a problémát? Másolja és beilleszti az adatokat? Vagy egyRDBMS GUI-t használ a jelentés táblázatkezelőbe történő generálásához? Ma megmutatom neked a PostgreSQL -COPY egy igazán apró, de kényelmes funkcióját.

Hello COPY#

A COPYdokumentációból: “A COPY adatokat mozgat a PostgreSQL táblák és a szabványos fájlrendszer fájljai között. A COPY TO egy táblázat tartalmát másolja egy fájlba, míg aCOPY FROM egy fájlból másolja az adatokat egy táblázatba (az adatokat a már a táblázatban lévő adatokhoz csatolja). A COPY TO egy SELECT lekérdezés eredményét is át tudja másolni.”

A COPY tehát mit csinál:

  1. Egy fájl tartalmát (az adatokat) át tudja másolni egy táblázatba, vagy
  2. Egy táblázat tartalmát (vagy egy SELECT lekérdezés eredményét) át tudja másolni egy fájlba.

Ha oszlopok listája van megadva, a COPY csak a megadott oszlopok adatait másolja a fájlba vagy a fájlból. Ha a táblázatban vannak olyan oszlopok, amelyek nem szerepelnek az oszloplistában, a COPY FROM az alapértelmezett értékeket illeszti be ezekbe az oszlopokba.

COPY egy fájlnévvel utasítja a PostgreSQL szervert, hogy közvetlenül olvasson egy fájlból vagy írjon egy fájlba. A fájlnak elérhetőnek kell lennie a kiszolgáló számára, és a nevet a kiszolgáló szemszögéből kell megadni. Ha STDIN vagy STDOUT van megadva, az adatok a kliens és a szerver közötti kapcsolaton keresztül kerülnek továbbításra.

Jól hangzik? Próbáljuk ki!

Kizáró nyilatkozat: A COPY képes adatokat olvasni/írni CSV és Binary fájlokból/ba. Bár biztos vagyok benne, hogy rengeteg felhasználási eset van a bináris fájlok használatára, ebben a blogbejegyzésben csak a CSV fájlok használatára fogok koncentrálni, mert személy szerint számomra ezek a legkényelmesebbek az adathalmazok átadásához.

COPY TO#

Ha egy SELECT lekérdezésből CSV fájlt akar létrehozni, vagy egy táblázat összes tartalmát egy CSV fájlba akarja dumpolni, használhatja a “COPY … TO …” parancsot.

SELECT-lekérdezés használata#

Ha egy eredményhalmazt szeretne egy CSV-fájlba másolni, a COPYparancs formátuma:

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

Vagy egy életszerűbb példa:

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

Mint látható, a COPY parancsot használjuk, amely az eredményeket egy CSV-fájlba másolja a helyi fájlrendszerbe. A lekérdezést sokkal tovább is vihetjük. Íme egy életszerű példa egy projektből, amelyen jelenleg dolgozom:

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;

Amint látja, bármilyen SELECT lekérdezést használhat, amely visszaad egy adat eredményhalmazt.De mit ér egy CSV fejlécek nélkül, igaz? 🙂

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

A HEADER kulcsszó hozzáadásával a végén a CSV fájlba fejlécek kerülnek,amelyek a táblázat oszlopainak nevei.

A CSV fájlok másik fontos jellemzője az elhatárolók. Attól függően, hogy milyen karakteres elválasztójelet szeretne a CSV-fájlban, megadhatja a karaktert a parancsban:

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

Táblázatnév használata#

Ha egy teljes táblázatot szeretne egy CSV-be kiüríteni, a parancs igazánegyszerűbb. Csak a táblázat nevét és a célfájlt kell megadnia:

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

Ez minden.

COPY FROM#

Most, amikor a CSV fájlból származó adatokat egy táblázatba akarja beilleszteni, használhatja a “COPY &mldr; FROM &mldr;” parancsot. A szintaxis nagyon hasonló, csak egykulcsnyi különbséggel:

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

Vagy, egy valós példával élve:

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

Outro#

A COPY a Postgres egy nagyon szép és jó funkciója. A brewity miatt igyekeztem ezt a blogbejegyzést röviden és egyszerűen tartani. Ha bármilyen gondolatod és kérdésed van, nyugodtan írj egy kommentet. Vagy, ha nem érzed magad beszédesnek, átmehetsz a COPYdokumentációra.

Tetszett ez a cikk? Iratkozzon fel a hírlevelemre, és kapja meg a friss bejegyzéseimet a postaládájába. Rövid és kedves, havonta megy ki több mint 1000 feliratkozónak.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.