Ответ 1
SET client_min_messages TO WARNING;
Этот параметр можно установить только для сеанса или сделать упорным с ALTER ROLE
или ALTER DATABASE
.
Или вы можете поместить это в свой ". psqlrc" .
Как остановить psql (клиент PostgreSQL) от вывода уведомлений? например.
psql: schema/auth.sql: 20: УВЕДОМЛЕНИЕ: CREATE TABLE/PRIMARY KEY создаст неявный индекс "users_pkey" для таблицы "пользователи"
По-моему, программа должна быть тихой, если у нее нет ошибки или какой-либо другой причины для вывода материала.
SET client_min_messages TO WARNING;
Этот параметр можно установить только для сеанса или сделать упорным с ALTER ROLE
или ALTER DATABASE
.
Или вы можете поместить это в свой ". psqlrc" .
Вероятнее всего, наиболее полное объяснение здесь содержится здесь, например, в Peter Eisentrauts в блоге
Я бы настоятельно рекомендовал изучить и переварить оригинальный блог, но окончательная рекомендация - это что-то вроде:
PGOPTIONS='--client-min-messages=warning' psql -X -q -a -1 -v ON_ERROR_STOP=1 --pset pager=off -d mydb -f script.sql
Используйте --quiet
при запуске psql.
Уведомление не бесполезно, но моя точка зрения.
Он может быть установлен в глобальном файле postgresql.conf
, а также с модификацией параметра client_min_messages
.
Пример:
client_min_messages = warning
Я попробовал различные предлагаемые решения (и их перестановки), предложенные в этой теме, но я не смог полностью подавить вывод/уведомления PSQL.
Я выполняю BASH-скрипт claws2postgres.sh
который выполняет некоторую предварительную обработку, а затем вызывает/выполняет сценарий PSQL.sql, чтобы вставить 1000 записей в PostgreSQL.
...
PGOPTIONS="-c client_min_messages=error"
psql -d claws_db -f claws2postgres.sql
Выход
[[email protected] bash]$ ./claws2postgres.sh
pg_terminate_backend
----------------------
DROP DATABASE
CREATE DATABASE
You are now connected to database "claws_db" as user "victoria".
CREATE TABLE
SELECT 1
INSERT 0 1
UPDATE 1
UPDATE 1
UPDATE 1
Dropping tmp_table
DROP TABLE
You are now connected to database "claws_db" as user "victoria".
psql:/mnt/Vancouver/projects/ie/claws/src/sql/claws2postgres.sql:33: NOTICE: 42P07: relation "claws_table" already exists, skipping
LOCATION: transformCreateStmt, parse_utilcmd.c:206
CREATE TABLE
SELECT 1
INSERT 0 1
UPDATE 2
UPDATE 2
UPDATE 2
Dropping tmp_table
DROP TABLE
[ ... snip ... ]
РЕШЕНИЕ
Обратите внимание на эту измененную строку PSQL, куда я перенаправляю вывод psql:
psql -d claws_db -f $SRC_DIR/sql/claws2postgres.sql &>> /tmp/pg_output.txt
Перенаправление &>>/tmp/pg_output.txt
добавляет все выходные данные в выходной файл, который также может служить файлом журнала.
Вывод терминала BASH
[[email protected] bash]$ time ./claws2postgres.sh
pg_terminate_backend
----------------------
DROP DATABASE
CREATE DATABASE
2:40:54 ## 2 h 41 min
[[email protected] bash]$
Мониторинг прогресса:
В другом терминале выполните
PID=$(pgrep -l -f claws2postgres.sh | grep claws | awk '{ print $1 }'); while kill -0 $PID >/dev/null 2>&1; do NOW=$(date); progress=$(cat /tmp/pg_output.txt | wc -l); printf "\t%s: %i lines\n" "$NOW" $progress; sleep 60; done; for i in seq{1..5}; do aplay 2>/dev/null /mnt/Vancouver/programming/scripts/phaser.wav && sleep 0.5; done
...
Sun 28 Apr 2019 08:18:43 PM PDT: 99263 lines
Sun 28 Apr 2019 08:19:43 PM PDT: 99391 lines
Sun 28 Apr 2019 08:20:43 PM PDT: 99537 lines
[[email protected] output]$
pgrep -l -f claws2postgres.sh | grep claws | awk '{ print $1 }'
pgrep -l -f claws2postgres.sh | grep claws | awk '{ print $1 }'
получает PID скрипта, назначенный $ PIDwhile kill -0 $PID >/dev/null 2>&1; do...
while kill -0 $PID >/dev/null 2>&1; do...
: пока работает этот скрипт, do...cat/tmp/pg_output.txt | wc -l
cat/tmp/pg_output.txt | wc -l
: использовать количество строк выходного файла в качестве индикатора прогрессаphaser.wav
5 разВыходной файл:
[[email protected] ~]$ head -n22 /tmp/pg_output.txt
You are now connected to database "claws_db" as user "victoria".
CREATE TABLE
SELECT 1
INSERT 0 1
UPDATE 1
UPDATE 1
UPDATE 1
Dropping tmp_table
DROP TABLE
You are now connected to database "claws_db" as user "victoria".
psql:/mnt/Vancouver/projects/ie/claws/src/sql/claws2postgres.sql:33: NOTICE: 42P07: relation "claws_table" already exists, skipping
LOCATION: transformCreateStmt, parse_utilcmd.c:206
CREATE TABLE
SELECT 1
INSERT 0 1
UPDATE 2
UPDATE 2
UPDATE 2
Dropping tmp_table
DROP TABLE
Рекомендации
[связанная ветка SO] Postgresql - есть ли способ отключить отображение операторов INSERT при чтении из файла?
[относится к решению] https://askubuntu.com/info/350208/what-does-2-dev-null-mean
The > operator redirects the output usually to a file but it can be to a device. You can also use >> to append.
If you don't specify a number then the standard output stream is assumed but you can also redirect errors
> file redirects stdout to file
1> file redirects stdout to file
2> file redirects stderr to file
&> file redirects stdout and stderr to file
/dev/null is the null device it takes any input you want and throws it away. It can be used to suppress any output.