Korzystam z psql, \dt
aby wyświetlić listę wszystkich tabel w bazie danych i muszę zapisać wyniki.
Jaka jest składnia na eksport wyników polecenia psql do pliku?
postgresql
psql
pstanton
źródło
źródło
Odpowiedzi:
Z pomocy psql (
\?
):Sekwencja poleceń będzie wyglądać następująco:
źródło
\o
ponownie powoduje wyłączenie.\?
nie trafiają do pliku. :(\o queries-output.txt
przekierowuje wszystkie kolejne polecenia o / p do pliku o nazwiequeries-output.txt
i wpisanie\o
( ponownie w wierszu polecenia psql ) odwraca to zachowanie przekierowania.Polecenie psql
\o
zostało już opisane przez jhwist.Alternatywnym podejściem jest użycie
COPY TO
polecenia do zapisu bezpośrednio do pliku na serwerze. Ma to tę zaletę, że jest zrzucane w wybranym, łatwym do przeanalizowania formacie - zamiast formatu tabelarycznego psql. Bardzo łatwo jest również zaimportować do innej tabeli / bazy danychCOPY FROM
.NB! Wymaga to uprawnień administratora i zapisuje do pliku na serwerze .
Przykład:
COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';')
Tworzy plik CSV za pomocą „;” jako separator pól.
Jak zawsze zobacz szczegóły w dokumentacji
źródło
\copy
który jest poleceniem postgres, może działać dla każdego użytkownika. Nie wiem, czy to działa dla \ dt, czy nie, ale ogólna składnia została odtworzona z następującego linku Składnia kopii SQL PostgresPowyższe spowoduje zapisanie wyniku wybranego zapytania w nazwie pliku podanej jako plik csv
EDYTOWAĆ:
Dla mojego serwera psql działa następująca komenda, to jest starsza wersja 8.5
źródło
Użyj parametru o polecenia pgsql.
źródło
COPY tablename TO '/tmp/output.csv' DELIMITER ',' CSV HEADER;
to polecenie służy do przechowywania całej tabeli jako csvźródło
Jeśli wystąpił następujący błąd
ufgtoolspg=> COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';') ; ERROR: must be superuser to COPY to or from a file HINT: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.
możesz uruchomić go w ten sposób:
psql somepsqllink_or_credentials -c "COPY (SELECT foo, bar FROM baz) TO STDOUT (format csv, delimiter ';')" > baz.csv
źródło
Użyj poniższego zapytania, aby zapisać wynik w pliku csv
\ skopiuj (zapytanie) do nagłówka csv „ścieżka pliku”;
Przykład
\ copy (wybierz nazwę, data z zamówienia z zamówienia) do nagłówka cvs „/home/ankit/Desktop/result.csv”;
Mam nadzieję, że ci to pomoże.
źródło
Zakładam, że istnieje do tego wewnętrzna komenda psql, ale możesz również uruchomić
script
komendę z pakietu util-linux-ng :źródło
To podejście będzie działać z dowolną komendą psql, od najprostszej do najbardziej złożonej, bez konieczności wprowadzania zmian lub poprawek w pierwotnej komendzie.
UWAGA: Dla serwerów Linux.
MODEL
PRZYKŁAD
MODEL
sudo -u postgres psql [some_db] -c "$(cat sqlcmd)" >>sqlop 2>&1
PRZYKŁAD
sudo -u postgres psql some_db -c "$(cat sqlcmd)" >>sqlop 2>&1
cat sqlop
Gotowe! Dzięki! = D.
źródło
Podejście do dokera
za pomocą komendy psql
lub zapytanie z pliku sql
źródło