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:
- Może skopiować zawartość pliku (dane) do tabeli, lub
- 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:
|
|
Albo, bardziej rzeczywisty przykład:
|
|
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ę:
|
|
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?
|
|
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:
|
|
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:
|
|
To wszystko.
COPY FROM#
Teraz, gdy chcesz wstrzyknąć dane z pliku CSV do tabeli, możesz użyć polecenia „COPY … FROM …”. Składnia jest bardzo podobna, z tylko jedną kluczową różnicą:
|
|
Or, używając prawdziwego przykładu z życia:
|
|
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.