отключить УВЕДОМЛЕНИЯ в выводе psql - PullRequest
54 голосов
/ 20 августа 2010

Как мне остановить psql (клиент PostgreSQL) от вывода уведомлений? например,

psql: schema / auth.sql: 20: ВНИМАНИЕ: CREATE TABLE / PRIMARY KEY создаст неявный индекс "users_pkey" для таблицы "users"

По моему мнению, программа должна молчать, если в ней нет ошибок или нет какой-либо другой причины для вывода материала.

Ответы [ 5 ]

58 голосов
/ 20 августа 2010
SET client_min_messages TO WARNING;

То, что можно установить только для сеанса или сделать постоянным с помощью ALTER ROLE или ALTER DATABASE.

Или вы можете поместить это в ваш ". Psqlrc" .

48 голосов
/ 20 августа 2010

Наверное, самое полное объяснение - Питер Эйзентраутс запись в блоге здесь

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

PGOPTIONS='--client-min-messages=warning' psql -X -q -a -1 -v ON_ERROR_STOP=1 --pset pager=off -d mydb -f script.sql
19 голосов
/ 20 августа 2010

Используйте --quiet при запуске psql.

Уведомление не бесполезно, но это моя точка зрения.

0 голосов
/ 29 апреля 2019

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

Я выполняю сценарий claws2postgres.sh BASH, который выполняет некоторые предварительныеЗатем обработка вызывает / выполняет сценарий PSQL .sql, чтобы вставить 1000 записей в PostgreSQL.

...
PGOPTIONS="-c client_min_messages=error"
psql -d claws_db -f claws2postgres.sql

Вывод

[victoria@victoria 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

[victoria@victoria bash]$ time ./claws2postgres.sh
 pg_terminate_backend 
----------------------

DROP DATABASE
CREATE DATABASE
2:40:54                       ## 2 h 41 min
[victoria@victoria 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
[victoria@victoria output]$

  • pgrep -l -f claws2postgres.sh | grep claws | awk '{ print $1 }' получает PID скрипта, назначенный $ PID
  • while kill -0 $PID >/dev/null 2>&1; do ...: пока этот скрипт выполняется, выполните ...
  • cat /tmp/pg_output.txt | wc -l: использовать счетчик строк выходного файла в качестве индикатора прогресса
  • когда закончите, сообщите, играя phaser.wav5 раз
  • phaser.wav: https://persagen.com/files/misc/phaser.wav

Выходной файл:

[victoria@victoria ~]$ 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

Ссылки

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.
0 голосов
/ 01 мая 2013

Может быть установлено в глобальном файле postgresql.conf, а также изменен параметр client_min_messages.

Пример:

client_min_messages = warning
...