Я запускаю script на моем сервере PostgreSQL:
psql db -f sql.sql
из bash
или в cron
script.
Он пытается разбивать страницы на more
или less
.
Как отключить разбиение на результат в psql
?
Все, что я хочу сделать, это изменить данные, я не забочусь о выходе.
Чтобы отключить разбиение на страницы, но сохраните вывод, используйте:
\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
но я не рекомендую это, так как он выкинет информацию об ошибках, которая может предупредить вас, что что-то не так. Вы также получаете результаты и отбрасываете их, что неэффективно; вам лучше просто не производить их в первую очередь, регулируя свои запросы.
Я тоже искал это, я нашел способ в подобном вопросе на ServerFault:
psql -P pager=off <other params>
отключает ведение поискового вызова, не подавляя вывод.
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
Вот еще один вариант. Это имеет то преимущество, что вам не нужно запоминать имена параметров psql и т.д.
psql ... | cat
psql db -f sql.sql > /dev/null
psql -U user -P pager=off -d database -c 'SQL';
PAGER="/dev/null" psql db -P pager=always -f sql.sql
чтобы он всегда убивал вывод.