เป็นไปได้ไหมที่จะไม่รวมผู้ใช้บางคนในกิจกรรมการบันทึกของ PostgreSQL


10

ฉันต้องการตรวจสอบกิจกรรมของผู้ใช้ในฐานข้อมูลของเรา ฉันได้ตั้งค่าพารามิเตอร์ต่อไปนี้ในpostgresql.conf:

log_min_duration_statement = 0
log_connections = on
log_disconnections = on
log_line_prefix = '%t %a %d %h %u |'

อย่างไรก็ตามฉันตระหนักว่าไฟล์บันทึกส่วนใหญ่เต็มไปด้วยคำสั่งที่ดำเนินการโดยpostgresผู้ใช้ซึ่งสคริปต์ที่ฉันเขียนสำหรับงานบำรุงรักษาใช้: คำนวณมุมมอง materialized ใหม่, pg_dump, pg_restore, แยกมุมมองเป็นไฟล์ตาราง ฯลฯ ผลที่ได้คือทุกวัน ล็อกไฟล์มีขนาดเกิน 12 Mb

มีวิธีในการแยกกิจกรรมของผู้ใช้ที่ระบุออกจากบันทึกหรือไม่


3
IIRC ALTER USER ... SET log_connections = offเป็นต้น
Craig Ringer

ยอดเยี่ยมฉันจะทำเช่นนั้น
SébastienClément

1
@CraigRinger เข้าสู่ระบบในฐานะdezso(superuser) ฉันมักจะได้รับERROR: parameter "log_connections" cannot be set after connection startเมื่อพยายามที่จะALTER ROLE bob SET log_connections = off
dezso

@dezso Drat ส่วนหนึ่งของเหตุผลที่ฉันผ่านการรับรองกับ IIRC ... ไม่แน่ใจ
Craig Ringer

1
@ CraigRinger ฉันได้ลองเมื่อวานนี้คิดว่ามันเป็นไปได้ - แล้วยกคำถาม: D
dezso

คำตอบ:


5

การใช้ALTER ROLE ... SET parameter;คำสั่งสามารถปรับพารามิเตอร์บันทึกเฉพาะผู้ใช้ โปรดทราบว่าพารามิเตอร์จะมีผลหลังจากออกจากระบบเท่านั้น

การตั้งค่า log_min_duration_statement = -1 (ล็อกอินครั้งที่ 1):

คอนโซล psql

P:\>psql -U postgres -h 132.156.208.45 -d my_db

my_db=# SHOW log_min_duration_statement;
 log_min_duration_statement
----------------------------
 0
(1 ligne)

my_db=# SELECT COUNT(*) FROM organisms;
 count
-------
   153
(1 ligne)

my_db=# ALTER ROLE postgres SET log_min_duration_statement=-1;
ALTER ROLE

my_db=# SHOW log_min_duration_statement;
 log_min_duration_statement
----------------------------
 0
(1 ligne)

my_db=# SELECT COUNT(*) FROM mv_rings;
 count
--------
 115270
(1 ligne)

my_db=# \q

ผลในบันทึก:

โปรดทราบว่าภายในเซสชันนั้นคำสั่งทั้งหมดสามารถมองเห็นได้ในบันทึกแม้หลังจากตั้งค่า log_min_duration_statement = -1

2015-10-15 14:14:01 EDT [unknown] my_db 123.456.789.012 postgres |LOG:  connection authorized: user=postgres database=my_db
2015-10-15 14:14:08 EDT psql my_db 123.456.789.012 postgres |LOG:  duration: 0.000 ms  statement: SHOW log_min_duration_statement;
2015-10-15 14:15:26 EDT psql my_db 123.456.789.012 postgres |LOG:  duration: 32.000 ms  statement: SELECT COUNT(*) FROM organisms;
2015-10-15 14:15:45 EDT psql my_db 123.456.789.012 postgres |LOG:  duration: 31.000 ms  statement: ALTER ROLE postgres SET log_min_duration_statement=-1;
2015-10-15 14:16:08 EDT psql my_db 123.456.789.012 postgres |LOG:  duration: 0.000 ms  statement: SHOW log_min_duration_statement;
2015-10-15 14:17:10 EDT psql my_db 123.456.789.012 postgres |LOG:  duration: 2059.000 ms  statement: SELECT COUNT(*) FROM mv_rings;
2015-10-15 14:17:29 EDT psql my_db 123.456.789.012 postgres |LOG:  disconnection: session time: 0:03:27.450 user=postgres database=my_db host=123.456.789.012 port=65269

เห็นผลของ log_min_duration_statement (เข้าสู่ระบบที่สอง):

คอนโซล psql

P:\>psql -U postgres -h 132.156.208.45 -d my_db

my_db=# SHOW log_min_duration_statement;
 log_min_duration_statement
----------------------------
 -1
(1 ligne)

my_db=# SELECT COUNT(*) FROM germplasms;
 count
--------
 475290
(1 ligne)

my_db=# \q

ผลในบันทึก:

ตามที่คาดไว้ไม่มีการบันทึกคำสั่งใด ๆ

2015-10-15 14:17:44 EDT [unknown] my_db 123.456.789.012 postgres |LOG:  connection authorized: user=postgres database=my_db
2015-10-15 14:20:27 EDT psql my_db 123.456.789.012 postgres |LOG:  disconnection: session time: 0:02:43.333 user=postgres database=my_db host=123.456.789.012 port=49372
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.