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

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

psql db -f sql.sql

от bash или в cron скрипт.

Он продолжает пытаться разбить вывод на more или же less,

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

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

8 ответов

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

\pset pager off

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

Смотрите руководство по PSQL.

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

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

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


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

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

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

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

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

Я тоже искал это, я нашел путь в аналогичном вопросе о ServerFault:

psql -P pager=off <other params>

отключает пейджинговую вещь, не подавляя вывод.

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

psql ... | cat

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

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

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

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

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

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

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

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

psql -U user -P pager=off -d database -c 'SQL';
psql db -f sql.sql > /dev/null

Это называется ПЕЙДЖЕР

Просто введите\pset pager 0в команду, чтобы выключить

затем

Входить\pset pager 1если вы хотите включить его снова . Он используется для длинного вывода

Этот синтаксис работал у меня в сеансе SSH:

      psql db user --command "select * from table007" -A -P pager
Другие вопросы по тегам