2012-03-29 8 views
36

Jak ukryć nazwy kolumn i liczbę wierszy w wynikach z psql?Jak ukryć dekoracje zestawu wyników w wyjściu Psql

biegnę zapytanie SQL poprzez psql z:

psql --user=myuser -d mydb --output=result.txt -c "SELECT * FROM mytable;" 

i spodziewam się wyjścia jak:

1,abc 
2,def 
3,xyz 

ale zamiast uzyskać:

id,text 
------- 
1,abc 
2,def 
3,xyz 
(3 rows) 

Of oczywiście, nie da się odfiltrować dwóch ostatnich wierszy i dolnego rzędu po fakcie, ale czy istnieje sposób na zrobienie tego tylko za pomocą psql? Odczytując jego stronę roboczą, widzę opcje kontrolowania ogranicznika pola, ale nic do ukrywania wyjściowych wyników.

Odpowiedz

42

Można użyć opcji -t lub --tuples-only:

psql --user=myuser -d mydb --output=result.txt -t -c "SELECT * FROM mytable;"

Zmieniano (ponad rok później) dodać:

też może chcieć sprawdzić the COPY command . Nie mam już żadnych wystąpień PostgreSQL przydatny do testowania z, ale myślę, że można napisać coś wzdłuż tych linii:

psql --user=myuser -d mydb -c "COPY mytable TO 'result.txt' DELIMITER ','"

(z wyjątkiem tego result.txt będą musiały być ścieżka bezwzględna). Komenda COPY obsługuje również bardziej inteligentny format CSV; patrz its documentation.

+16

alternatywnie, jeśli chcesz, ale nie nagłówek stopce row-count, uruchom psql z --pset = "footer = off" –

+1

'COPY' rzeczywiście może być poprawna alternatywa, ale plik zakończy się na serwerze, a nie na komputerze, na którym uruchomiono psql ... – fvu

+0

@fvu: Dobra uwaga. Zwykle uruchamiałem 'psql' * na * serwerze, więc dla mnie to nie był problem. . . – ruakh

15

Możesz również przekierować wyjście z poziomu psql i użyć tej samej opcji. Użyj \ o, aby ustawić plik wyjściowy i \ t, aby wyprowadzać tylko krotki (lub \pset, aby wyłączyć tylko "stopkę" wiersza).

\o /home/flynn/queryout.txt 
\t on 
SELECT * FROM a_table; 
\t off 
\o 

Alternatywnie

\o /home/flynn/queryout.txt 
\pset footer off 
. . . 
Powiązane problemy