PG 13.6 : Data corruption error message not being sent to syslog - Mailing list pgsql-general

From Abhishek Bhola
Subject PG 13.6 : Data corruption error message not being sent to syslog
Date
Msg-id CAEDsCzhtpDwCMPzhStxzw7k6ZHsv-gQr1WfnE4y_3pSgRJr7OQ@mail.gmail.com
Whole thread Raw
Responses Re: PG 13.6 : Data corruption error message not being sent to syslog
List pgsql-general
This morning I noticed this error in my PG CSV log file.

```
2022-05-25 23:59:17.776 JST,,,117110,,628cf2c5.1c976,1,,2022-05-25 23:59:17 JST,9/611296,0,ERROR,XX001,"uncommitted xmin 16395356 from before xid cutoff 144683296 needs to be frozen",,,,,"while scanning block 19267 of relation ""relation_name""
```

This was a data corruption error that I resolved by truncating the table and reloading it. However, I was curious why this message was not sent to my syslog.

My logging configuration in the `postgresql.conf` is as follows:
```
# Logging settings
# ----------------
log_destination = 'csvlog,syslog'
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql_%Y%m%d.log'
log_truncate_on_rotation = off
log_rotation_age = 1h
log_rotation_size = 0

log_timezone = 'Japan'
log_line_prefix = '%t [%p]: [%l-1] %h:%u@%d:[PG]:CODE:%e '

log_statement = 'all'
log_min_messages = info         # DEBUG5
log_min_error_statement = info  # DEBUG5
log_error_verbosity = default
log_checkpoints = on
log_lock_waits = on
log_temp_files = 0
log_connections = on
log_disconnections = on
log_duration = off
log_min_duration_statement = 1000
log_autovacuum_min_duration = 3000ms
```

The OS info for the server on which this DB is running is as follows:
```
LSB Version:    :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description:    CentOS Linux release 7.9.2009 (Core)
Release:        7.9.2009
Codename:       Core
```

And there is a filter defined for the rsyslog messages as follows:
```
## Added by DataConsulting Team for syslog filter
if $programname == 'postgres' and \
($msg contains 'CODE:28000'    or \
$msg contains 'CODE:28P01'     or \
$msg contains 'CODE:3D000'     or \
$msg contains 'CODE:08006'     or \
$msg contains 'CODE:42501'        \
) then /xxxx/xxxx/xxx/pg_log/postgres_filter.log

if $programname == 'postgres' and \
(                                 \
not ($msg contains '[PG]') or \
$msg contains 'CODE:00000'     or \
$msg contains 'CODE:28000'     or \
$msg contains 'CODE:28P01'     or \
$msg contains 'CODE:3D000'     or \
$msg contains 'CODE:42501'     or \
$msg contains 'CODE:42601'     or \
$msg contains 'CODE:42P01'     or \
$msg contains 'CODE:42P02'     or \
$msg contains 'CODE:08006'     or \
$msg contains  'CODE:42703'       \
) then stop
```

`syslog_ident` and `syslog_facility` is as follows:
```
postgres=# show syslog_ident ;
 syslog_ident
--------------
 postgres
(1 row)

postgres=# show syslog_facility ;
 syslog_facility
-----------------
 local0
(1 row)
```

I was thinking that such an error message would be sent to the `/var/log/message`, from where it would be picked, but this wasn't the case. Could someone explain why this is so and what can I change for these messages to be sent to syslog?

This correspondence (including any attachments) is for the intended recipient(s) only. It may contain confidential or privileged information or both. No confidentiality or privilege is waived or lost by any mis-transmission. If you receive this correspondence by mistake, please contact the sender immediately, delete this correspondence (and all attachments) and destroy any hard copies. You must not use, disclose, copy, distribute or rely on any part of this correspondence (including any attachments) if you are not the intended recipient(s).本メッセージに記載および添付されている情報(以下、総称して「本情報」といいます。)は、本来の受信者による使用のみを意図しています。誤送信等により本情報を取得された場合でも、本情報に係る秘密、または法律上の秘匿特権が失われるものではありません。本電子メールを受取られた方が、本来の受信者ではない場合には、本情報及びそのコピーすべてを削除・破棄し、本電子メールが誤って届いた旨を発信者宛てにご通知下さいますようお願いします。本情報の閲覧、発信または本情報に基づくいかなる行為も明確に禁止されていることをご了承ください。

pgsql-general by date:

Previous
From: jian he
Date:
Subject: link that explain ICU_LOCALE locale concept about local variant code and keywords.
Next
From: Matthias Apitz
Date:
Subject: Re: existing row not found by SELECT ... WHERE CTID = ?