PostgreSQL отключает больше вывода

Я запускаю script на моем сервере PostgreSQL:

psql db -f sql.sql

из bash или в cron script.

Он пытается разбивать страницы на more или less.

Как отключить разбиение на результат в psql?

Все, что я хочу сделать, это изменить данные, я не забочусь о выходе.

Ответ 1

Чтобы отключить разбиение на страницы, но сохраните вывод, используйте:

\pset pager off

Чтобы запомнить этот параметр, добавьте его в ~/.psqlrc.

См. руководство psql.

В более старых версиях Pg это был просто переключатель, поэтому \pset pager

Чтобы полностью отключить вывод запроса, используйте \o /dev/null в psql script.

Чтобы подавить информационный вывод psql, запустите его с помощью -q или установите QUIET=1 в среде.


Чтобы получить результаты и выбросить их, вы можете перенаправить stdout в /dev/null с помощью:

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

Вы можете перенаправить оба stdout и stderr с помощью:

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

но я не рекомендую это, так как он выкинет информацию об ошибках, которая может предупредить вас, что что-то не так. Вы также получаете результаты и отбрасываете их, что неэффективно; вам лучше просто не производить их в первую очередь, регулируя свои запросы.

Ответ 2

Я тоже искал это, я нашел способ в подобном вопросе на ServerFault:

psql -P pager=off <other params>

отключает ведение поискового вызова, не подавляя вывод.

Ответ 3

bash, будучи shell, имеет 2 потока, вы можете перенаправить эти выходные данные: stdout и stderr, потому что этот вывод нужно перенаправить где-то, linux имеет конкретное "отбросить все" node до /dev/null. Все, что вы посылаете туда, просто исчезнет в пустоте.

(у оболочек также есть входной поток, но я проигнорирую это здесь, так как вы попросили подавить вывод)

Эти потоки представлены числами: 1 для stdout и 2 для stderr.

Итак, если вы хотите перенаправить только stdout, вы сделали бы это с операторами < и > (в основном там, где он указывает, туда, куда поступают данные)

Предположим, мы хотим подавить stdout (перенаправление на /dev/null ):

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

Как вы можете видеть, это stdout по умолчанию, номер потока не используется если вы хотите использовать номер потока, который вы пишете

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

Теперь, если вы хотите подавить stderror (поток номер 2), вы должны использовать

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

Вы также можете перенаправить один поток на другой, например stderror на stdout, что полезно, если вы хотите сохранить все выходные где-то, регулярные и ошибки.

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

помните, что между 2>&1

не должно быть пробелов,

Наконец, и иногда наиболее интересным является тот факт, что вы можете подавлять весь вывод с помощью &>, поскольку, когда вы хотите, чтобы он был "совершенно тихим"

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

Ответ 4

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

Ответ 5

Вот еще один вариант. Это имеет то преимущество, что вам не нужно запоминать имена параметров psql и т.д.

psql ... | cat

Ответ 6

psql -U user -P pager=off -d database -c 'SQL';