Bagaimana cara mengaktifkan pencatatan semua SQL yang dijalankan oleh PostgreSQL 8.3?
Diedit (info lebih lanjut) saya mengubah baris ini:
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_statement = 'all'
Dan restart layanan PostgreSQL ... tetapi tidak ada log yang dibuat ... Saya menggunakan Windows Server 2003.
Ada ide?
postgresql
logging
Paul
sumber
sumber
logging_collector = on
systemctl restart postgresql
mungkin tidak benar-benar memulai kembali layanan PostgreSQL yang telah Anda konfigurasikan (saya belum mengerti mengapa), jadi perubahan dalam file konfigurasi tidak akan diterapkan. Lebih aman digunakanpg_ctl
(ataupg_ctlcluster
di Debian).systemctl reload postgresql
,systemctl restart postgresql
,service postgresql reload
danservice postgresql restart
semua membuat perubahan konfigurasi yang efektif.Jawaban:
Di
data/postgresql.conf
file Anda , ubahlog_statement
pengaturan menjadi'all'
.Edit
Melihat informasi baru Anda, saya akan mengatakan mungkin ada beberapa pengaturan lain untuk memverifikasi:
log_destination
variabellogging_collector
log_directory
direktori sudah ada di dalamdata
direktori, dan bahwa pengguna postgres dapat menulisnya.sumber
pg_ctl reload
ALTER SYSTEM
perintah baru superuser dapat mengatur params GUC dari SQL.data
direktori dikutip dalam jawabannya adalah bukan nama harfiahnya; ini merujuk pada path yang ditetapkan kedata_directory
variabel dalam file konfigurasi PostgreSQL. Pada Debian dan Ubuntu GNU / Linux, file ini biasanya berada di/etc/postgresql/$v/main/postgresql.conf
, di mana$v
versi server. Juga, pada sistem yang disebutkan di atas, kapanlog_destination = 'stderr'
, output ditulis ke/var/log/postgresql/postgresql-$v-main.log
, di mana$v
versi server (bukan ke beberapa lokasi di dalamdata_directory
).Edit
/etc/postgresql/9.3/main/postgresql.conf
, dan ubah baris sebagai berikut.Catatan : Jika Anda tidak menemukan
postgresql.conf
file, ketik saja$locate postgresql.conf
terminal#log_directory = 'pg_log'
untuklog_directory = 'pg_log'
#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
untuklog_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
#log_statement = 'none'
untuklog_statement = 'all'
#logging_collector = off
untuklogging_collector = on
Opsional :
SELECT set_config('log_statement', 'all', true);
sudo /etc/init.d/postgresql restart
atausudo service postgresql restart
Permintaan api di postgresql
select 2+2
Temukan login saat ini
/var/lib/pgsql/9.2/data/pg_log/
File-file log cenderung tumbuh banyak dari waktu ke waktu, dan mungkin membunuh mesin Anda. Demi keamanan Anda, tulis skrip bash yang akan menghapus log dan memulai kembali server postgresql.
Terima kasih @paul, @Jarret Hardie, @ Zoltán, @Rix Beck, @Latif Premani
sumber
# log_destination = 'stderr'
pada file konfigurasi sebelum ini bekerja.log_filename = 'postgresql-%d.log'
dan tidak ada itu tidak akan ditimpa setelah setiap restart, itu akan menambahkan untuk setiap hari dan menimpa setiap bulan. Tentu saja ada hari yang berbeda tergantung pada bulan 28,29,30,31 - tetapi Anda mendapatkan idenya.Dengan pengguna yang sesuai, hak dapat menggunakan kueri di atas setelah terhubung. Ini akan memengaruhi pencatatan hingga sesi berakhir.
sumber
SET log_statement = 'all'
atau (untuk tingkat transaksi)SET LOCAL log_statement = 'all'
. Anda mungkin juga tertarik denganclient_min_messages
danlog_min_messages
pengaturan.permission denied to set parameter "log_statement"
karena pengguna saya bukan pengguna super.GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON { FUNCTION function_name ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] } TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
Anda juga perlu menambahkan baris-baris ini di PostgreSQL dan restart server:
sumber
Required to be on for csvlogs
, berpikir opsi ini untuk mencatat output query dan bukan hanya pernyataan, tapi bukan itu masalahnya.FYI: Solusi lain hanya akan mencatat pernyataan dari database default — biasanya
postgres
— untuk mencatat orang lain; mulai dengan solusi mereka; kemudian:Ref: https://serverfault.com/a/376888 /
log_statement
sumber
Setel
log_statement
keall
:Pelaporan dan Pencatatan Kesalahan - log_statement
sumber
+1 untuk jawaban di atas. Saya menggunakan konfigurasi berikut
sumber
Hanya untuk memiliki detail lebih lanjut untuk CentOS 6.4 (Red Hat 4.4.7-3) menjalankan PostgreSQL 9.2, berdasarkan instruksi yang ditemukan di halaman web ini :
log_statement = 'all'
danlog_min_error_statement = error
dalam/var/lib/pgsql/9.2/data/postgresql.conf
./usr/pgsql-9.2/bin/pg_ctl reload -D /var/lib/pgsql/9.2/data/
./var/lib/pgsql/9.2/data/pg_log/
sumber
pg_ctl reload
cukup, dan tidak mengganggu koneksi. Tidak yakin jawaban ini menambah apa pun yang sudah ada di sini.Anda juga harus mengatur parameter ini untuk mencatat setiap pernyataan:
sumber
Saya mencoba mengatur
log_statement
di beberapa file konfigurasi postgres tetapi sebenarnya file tersebut tidak dibaca oleh postgres kami.Saya mengkonfirmasi bahwa menggunakan permintaan:
Saya menggunakan cara ini https://stackoverflow.com/a/41912295/2294168
sumber