Jestem pewien, że każdy z nas znalazł się w sytuacji, w której musiał wygenerować raport i/lub wyciągnąć jakieś dane z bazy danych i przedstawić je w arkuszu kalkulacyjnym. W wielu przypadkach nasi klienci wolą Excel do obsługi arkuszy/raportów, ponieważ, duh, jest to Excel.

Więc, jak podchodzisz do tego problemu? Czy kopiujesz i wklejasz dane? A może używasz GUI systemu RDBMS do wygenerowania raportu w arkuszu kalkulacyjnym? Dziś pokażę Ci zupełnie małą, ale wygodną funkcję PostgreSQL -COPY.

Witaj COPY#

Z dokumentacji COPYdokumentacja: „COPY przenosi dane pomiędzy tabelami PostgreSQL a standardowymi plikami systemu plików. COPY TO kopiuje zawartość tabeli do pliku, podczas gdyCOPY FROM kopiuje dane z pliku do tabeli (dołączając je do tego, co już znajduje się w tabeli). COPY TO może również skopiować wyniki zapytania SELECT.”

Co zatem robi COPY:

  1. Może skopiować zawartość pliku (dane) do tabeli, lub
  2. Może skopiować zawartość tabeli (lub wynik zapytania SELECT) do pliku.

Jeśli podana jest lista kolumn, funkcja KOPIUJ skopiuje do pliku lub z pliku tylko dane w określonych kolumnach. Jeśli kolumny tabeli nie znajdują się na liście kolumn, COPY FROM wstawi dla nich wartości domyślne.

KOPIUJ z nazwą pliku określa, czy serwer PostgreSQL ma bezpośrednio odczytać lub zapisać dane do pliku. Plik musi być dostępny dla serwera, a nazwa musi być określona z punktu widzenia serwera. Jeśli określony jest STDIN lub STDOUT, dane są przesyłane przez połączenie między klientem a serwerem.

Dobrze brzmi? Spróbujmy!

Zastrzeżenie: COPY ma możliwość odczytu/zapisu danych z/do plików CSV i Binary. Chociaż jestem pewien, że istnieje wiele przypadków użycia plików binarnych, w tym blogpoście skupię się tylko na użyciu go do plików CSV, ponieważ dla mnie są one najwygodniejsze do przenoszenia zestawów danych.

COPY TO#

Gdy chcesz utworzyć plik CSV z zapytania SELECT, lub zrzucić całą zawartość tabeli do pliku CSV, możesz użyć polecenia „COPY … TO …”.

Użycie zapytania SELECT#

Gdy chcesz skopiować zbiór wyników do pliku CSV, format polecenia COPYcommand jest następujący:

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

Albo, bardziej rzeczywisty przykład:

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

Jak widać, używamy polecenia COPY, które kopiuje wyniki do pliku CSV w lokalnym systemie plików. Możesz pójść o wiele dalej. Oto przykład z życia wzięty z projektu, nad którym obecnie pracuję:

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 widzisz, możesz użyć dowolnego zapytania SELECT, które może zwrócić zestaw wyników danych.Ale, czym jest CSV bez nagłówków, prawda?

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

Dodanie słowa kluczowego HEADER na końcu spowoduje włączenie nagłówków do pliku CSV, które są nazwami kolumn tabeli.

Inną kluczową cechą plików CSV są delimitery. W zależności od tego, jaki znak ogranicznika chcesz, aby plik CSV miał, możesz określić ten znak w poleceniu:

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

Używanie nazwy tabeli#

Gdy chcesz, aby cała tabela została zrzucona do pliku CSV, polecenie jest naprawdę prostsze. Wystarczy podać nazwę tabeli i pliku docelowego:

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

To wszystko.

COPY FROM#

Teraz, gdy chcesz wstrzyknąć dane z pliku CSV do tabeli, możesz użyć polecenia „COPY &mldr; FROM &mldr;”. Składnia jest bardzo podobna, z tylko jedną kluczową różnicą:

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

Or, używając prawdziwego przykładu z życia:

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

Outro#

KOPIA jest naprawdę zgrabną i fajną funkcją Postgresa. Ze względu na brewity, starałem się trzymać ten blogpost krótko i prosto. Jeśli masz jakieś przemyślenia i pytania, nie krępuj się zostawić mi komentarz. Albo, jeśli nie czujesz się na siłach, możesz przejść do dokumentacji COPYdocumentation.

Podobał Ci się ten artykuł? Zapisz się do mojego newslettera i otrzymuj moje świeże posty do swojej skrzynki odbiorczej. Jest on krótki i słodki, wychodzący co miesiąc do ponad 1000 subskrybentów.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.