Eksport i import tabel z CSV w PostgreSQL
Często po przetworzeniu danych w bazie chcemy wyeksportować nasze wyniki do tabel tekstowych. Najprostszym sposobem żeby to zrobić, jest eksport z PostgreSQL do pliku CSV. Pokażemy Wam to na przykładzie naszej tabeli z powiatami z PRG. Do pliku CSV będziemy chcieli zapisać wszystkie powiaty z województwa mazowieckiego. Kod powiatów z tego regionu zaczyna się od 14. Użyjemy tego pola do selekcji danych z użyciem LIKE. Do naszej tabeli wyeksportujemy id, kod powiatu, nazwę powiatu i jego geometrię w formacie WKT o którym pisaliśmy już wcześniej tutaj. Nasze zapytanie będzie wyglądało następująco:
SELECT id, jpt_kod_je, jpt_nazwa_, st_astext(geom) as wkt FROM public.powiaty WHERE jpt_kod_je LIKE '14%'
To zapytanie wyświetli nam dane do wyeksportowania. Pierwszy wiersz wygląda tak
15;"1410";"powiat łosicki";"MULTIPOLYGON(((743608.689577573 481591.605684734,743608.85432916 481591.97791123,743734.504334423 481877.947866647,743737.475693689 481884.708503788,743738.152583106 481886.228719007,743740.775865583 481892.223572086,743743.207912434 481897.794251111,74391 (...)"
W celu wyeksportowania wyników zapytania do pliku CSV musimy opakować naszego SELECTa dodatkowo w COPY:
COPY (SELECT id, jpt_kod_je, jpt_nazwa_, st_astext(geom) as wkt FROM public.powiaty WHERE jpt_kod_je LIKE '14%') TO ‘C:\nasza_tabela.csv’ CSV HEADER
Po wykonaniu zapytania w miejscu docelowym (w naszym przypadku na dysku C) utworzony zostanie nowy plik z wynikami zapytania. Dodając do zapytania CSV HEADER zapisujemy również nazwy kolumn.
Wykorzystując COPY możemy także wczytać dane do PostgreSQL. W tym przypadku TO zastępujemy FROM. Nasze zapytanie wczytujące dane wyglądałoby następująco:
COPY nowa_tabela FROM ‘C:\nasza_tabela.csv’ CSV HEADER
Przed wykonaniem tego zapytania musimy jednak pamiętać, aby utworzyć w PostgreSQL tabelę do której będziemy zapisać dane z pliku CSV.