Mam schemat bazy danych o nazwie: nyummy
i tabelę o nazwie cimory
:
create table nyummy.cimory (
id numeric(10,0) not null,
name character varying(60) not null,
city character varying(50) not null,
CONSTRAINT cimory_pkey PRIMARY KEY (id)
);
Chcę wyeksportować dane cimory
tabeli jako wstawianie pliku skryptu SQL. Chcę jednak eksportować rekordy / dane tylko wtedy, gdy miasto jest równe „tokyo” (zakładając, że wszystkie dane miasta są pisane małymi literami).
Jak to zrobić?
Nie ma znaczenia, czy rozwiązanie jest dostępne w darmowych narzędziach GUI, czy w wierszu poleceń (chociaż rozwiązanie narzędzi GUI jest lepsze). Próbowałem pgAdmin III, ale nie mogę znaleźć opcji, aby to zrobić.
Odpowiedzi:
Utwórz tabelę z zestawem, który chcesz wyeksportować, a następnie użyj narzędzia wiersza polecenia pg_dump, aby wyeksportować do pliku:
--column-inserts
zrzuci jako polecenia wstawiania z nazwami kolumn.--data-only
nie zrzucaj schematu.Jak skomentowano poniżej, utworzenie widoku zamiast tabeli pozwoli na uniknięcie tworzenia tabeli, ilekroć konieczny jest nowy eksport.
źródło
create view export_view...
, ponieważ widok byłby aktualny wraz ze zmianami w tabeli podstawowej. W docs powiedzieć,--table=table: Dump only tables (or **views**...
więc miałem nadzieję to będzie działać, ale dumping widok niestety daje żadnych danych. : Ppg_dump --table=my_schema.my_view --data-only --inserts my_db > data.sql
wersji 9.5.3, a mojecreate
oświadczenie było takie samo, jak twojecreate view...
. W wyniku otrzymuję tylko zwykłe komentarze iSET
instrukcje pg_dump . Nie jestem pewien, gdzie się mylę.Przez eksport danych tylko do użytku
COPY
.Otrzymujesz plik z jednym wierszem tabeli w wierszu jako zwykły tekst (nie
INSERT
polecenia), jest mniejszy i szybszy:Zaimportuj to samo do innej tabeli o tej samej strukturze w dowolnym miejscu za pomocą:
COPY
zapisuje i odczytuje pliki lokalne na serwerze , w przeciwieństwie do programów klienckich takich jakpg_dump
lub,psql
które odczytują i zapisują pliki lokalne na kliencie . Jeśli oba działają na tym samym komputerze, nie ma to większego znaczenia, ale dotyczy zdalnych połączeń.Istnieje również
\copy
polecenie psql, które:źródło
insert
poleceniach, prawda?STDIN
iSTDOUT
może być używany zamiast ścieżki pliku, przydatny w przypadku eksportu małych danych.--column-inserts
flagi, pg_dump używaCOPY
od standardowego wejścia dla każdej z tabel w kodzie SQL generuje.Jest to łatwy i szybki sposób ręcznego eksportowania tabeli do skryptu za pomocą pgAdmin bez dodatkowych instalacji :
Ta metoda działa również z techniką tworzenia tabeli eksportu, jak pokazano w odpowiedzi @Clodoaldo Neto.
źródło
SQL Workbench ma taką funkcję.
Po uruchomieniu zapytania kliknij prawym przyciskiem myszy wyniki zapytania i wybierz „Kopiuj dane jako SQL> Wstaw SQL”
źródło
W moim przypadku użycia byłem w stanie po prostu potokować do grep.
źródło
Próbowałem napisać procedurę w ten sposób, opartą na kodach @PhilHibbs, w inny sposób. Proszę spojrzeć i przetestować.
I wtedy :
testowany na moim postgresie 9.1, z tabelą z mieszanym typem pola danych (tekst, double, int, znacznik czasu bez strefy czasowej itp.).
Dlatego potrzebny jest CAST w typie TEXT. Mój test działa poprawnie dla około 9 milionów linii, wygląda na to, że zawiedzie tuż przed 18 minutami pracy.
ps: Znalazłem odpowiednik mysql w sieci.
źródło
Możesz zrobić widok tabeli z określonymi rekordami, a następnie zrzucić plik sql
źródło
Właśnie podjąłem szybką procedurę, aby to zrobić. Działa tylko dla jednego wiersza, dlatego tworzę widok tymczasowy, który po prostu wybiera wiersz, który chcę, a następnie zastępuję pg_temp.temp_view rzeczywistą tabelą, do której chcę wstawić.
Wywołano w ten sposób:
Nie testowałem tego pod kątem ataków z iniekcją, daj mi znać, jeśli wywołanie quote_literal nie jest wystarczające.
Działa to również tylko w przypadku kolumn, które można po prostu rzutować na :: text iz powrotem.
Dotyczy to również Greenplum, ale nie mogę wymyślić powodu, dla którego nie działałoby to na Postgres, CMIIW.
źródło
próbowałem w pgadmin wykonywania zapytania z
" EXECUTE QUERY WRITE RESULT TO FILE "
opcjąto tylko eksport danych, w przeciwnym razie spróbuj
-t opcja używana dla ==> Zrzuć tylko tabele (lub widoki lub sekwencje) pasujące do tabeli, patrz
źródło
create view
wyciągu