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
Это называется ПЕЙДЖЕР
Просто введите\pset pager 0
в команду, чтобы выключить
затем
Входить\pset pager 1
если вы хотите включить его снова . Он используется для длинного вывода
Этот синтаксис работал у меня в сеансе SSH:
psql db user --command "select * from table007" -A -P pager