2012-06-24 10 views
89

Używam skryptu na mój serwer PostgreSQL:PostgreSQL wyłączyć więcej wyjście

psql db -f sql.sql 

z bash lub w cron skryptu.

Kontynuuje próbę paginacji danych wyjściowych za pomocą more lub less.

Jak wyłączyć paginację wyników w psql?

Wszystko, co chcę zrobić, to zmienić dane, nie obchodzi mnie żadne wyjście.

Odpowiedz

3
psql db -f sql.sql > /dev/null 
6

bash, będąc shell ma 2 streams można przekierować te dane wyjściowe: stdout i stderr, bo ta moc musi być przekierowany gdzieś, Linux ma specyficzny "wyrzucić wszystko jest węzeł nieosiągalnego przez /dev/null. Wszystko, co wyślesz, zniknie w pustce.

(muszle mają również strumień wejściowy ale będę ignorować to tutaj ponieważ poprosił o tłumieniu wyjście)

Strumienie te są reprezentowane przez numery: 1 do stdout i 2 na stderr.

jeśli chcesz przekierować właśnie tak stdout chcesz zrobić z < i > operatorów (w zasadzie gdzie wskazuje na to, gdzie dane płynie)

przypuszczać chcemy tłumić stdout (przekierowanie do/dev/null):

psql db -f sql.sql > /dev/null

Jak widać jest to stdout jest domyślne, brak numeru strumień został wykorzystany jeśli chciał użyć numeru strumienia chcesz napisać

psql db -f sql.sql 1> /dev/null

Teraz, jeśli chcesz, aby stłumić stderror (numer strumień 2), można użyć

psql db -f sql.sql 2> /dev/null

Można również przekierować jednego strumienia do drugiego, na przykład stderror na standardowe wyjście, które jest przydatne, jeśli chcesz gdzieś zachować wynik, zwykły i błędy.

psql db -f sql.sql 2>&1 > log.txt

pamiętajcie nie może być spacji między 2>&1

Wreszcie, a czasem najbardziej interesujący jest fakt, że można stłumić wszystkie wyjścia przy użyciu &>, gdy chcesz to doskonale cichy '

psql db -f sql.sql &> /dev/null

+1

Podczas gdy te informacje są zasadniczo zgodne, to w tym przypadku nie działają, ponieważ psql nie wysyła komunikaty informacyjne do stderr. Są wymieszane z danymi na standardowym wyjściu. –

+0

Nagle zdaję sobie sprawę, że twoim celem jest to, że ostateczny przypadek "&>" może być użyty przez OP do zatrzymania pager'a, poprzez tłumienie wszystkich wyników. Usuwam moje poparcie, jeśli w jakikolwiek sposób zmienisz swoją odpowiedź. –

153

Aby wyłączyć stronicowanie ale zachować wyjście, używać:

\pset pager off 

Aby zapamiętać to ustawienie, dodaj go do swojej ~/.psqlrc.

Zobacz the psql manual.

W starszych wersjach PG to był tylko przełącznik, więc \pset pager

Aby całkowicie stłumić wynik zapytania, użyj \o /dev/null w skrypcie psql.

Aby wyłączyć wyświetlanie informacji wyjściowej w postaci psql, uruchom go za pomocą -q lub ustaw QUIET=1 w środowisku.


aby uzyskane wyniki i je wyrzucić można przekierować stdout do /dev/null z:

psql db -f sql.sql >/dev/null 

można przekierować zarówno stdout i stderr z:

psql db -f sql.sql >&/dev/null 

ale nie wiem Zalecamy, aby, jak wyrzuci informacje o błędach, które mogą ostrzec, że coś nie idzie dobrze. Ty też produkujesz wyniki i wyrzucasz je, co jest nieefektywne; lepiej jest, po prostu nie produkować ich, dostosowując swoje zapytania.

+0

To powstrzymuje go od używania pagera, ale nie zatrzymuje wyjścia, nie? Zgaduję, że potrzebujesz 'PAGER ="/dev/null "psql db -P pager = always -f sql.sql', aby zawsze zabijał wynik. –

+2

Nie, użyj \ o/dev/null –

67

szukałem to też znalazłem drogę w similar question na ServerFault:

psql -P pager=off <other params> 

wyłącza rzecz stronicowania, bez tłumienia wyjścia.

+1

Ta odpowiedź była bardziej przydatna niż cokolwiek na temat -P na stronach man. Dzięki! – nortally

+0

dokładnie tego potrzebuję.Dzięki :) –

1

Oto kolejna opcja. Ma tę zaletę, że nie musisz pamiętać nazw opcji psql, itp.

psql ... | cat 
+0

Absolutny protip! +1 – sjas