Bazy danychGIS

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.