Saya memiliki fungsi debug pada pesan. Pesan itu dimunculkan seperti
RAISE NOTICE 'Value of id : %', id;
Saya mengatur file log dengan \o messages.txt
Lalu saya melakukan apa yang harus saya lakukan \i process.sql
Dan ketika eksekusi dihentikan \o
,.
Masalahnya adalah bahwa saya tidak memiliki pesan yang diangkat oleh pemberitahuan ke messages.txt. Pesan-pesan ditampilkan di layar tetapi saya ingin mereka ditulis di messages.txt
Bagaimana saya bisa melakukan itu?
Saya mencoba menggunakan RAISE LOG...
dan pesan ditulis dalam file log ... Bukan itu yang saya inginkan.
Saya punya pekerjaan dengan
plsql -f /path/to/process.sql > messages.txt 2>&1
tapi saya ingin tahu bagaimana saya bisa menggunakan \ i dan \ o pada klien plsql memiliki pesan ke file yang ditentukan dalam \ o
Klien saya, di cygwin adalah psql (PostgreSQL) 8.2.11 dan versi server 9.0.7
sumber
psql
?libpq
Saya bisa mengerti jika Anda memiliki perangkat lunak non-portabel yang harus berjalan di Cygwin, tetapi kapanpsql
tersedia secara native untuk Windows apa daya tarik menjalankan versi kuno di Cygwin?Jawaban:
Saya khawatir Anda tidak akan menyukai jawaban ini, tetapi saat ini tampaknya tidak mungkin. Dari dokumentasi psql :
Dan seperti yang Anda perhatikan, tidak ada cara mengarahkan pesan kesalahan saat menggunakan secara
psql
interaktif.(Saya telah bermain-main dengan semua jenis pengalihan dari \ o tidak berhasil. Sepertinya saluran kueri keluaran berbeda dari yang menerima pesan kesalahan - dan bahkan kesalahan dari server dan dibesarkan dalam prosedur Anda berjalan dengan cara yang berbeda .
out.sql berisi
dalam kedua kasus. Inilah sebabnya saya tidak tahu tentang apa saluran / file descriptor digunakan untuk mengeluarkan pesan yang muncul dari suatu prosedur.))
(Ada utas tentang peretas PostgreSQL yang mungkin menjelaskan masalah ini: http://postgresql.1045698.n5.nabble.com/psql-output-locations-td5068313.html )
Apa yang bisa dilakukan adalah mulai
psql
sepertidan ini akan mengarahkan semua output ke file yang ditentukan. Satu-satunya masalah dengan ini bahwa Anda bahkan tidak memiliki prompt, dan kehilangan kemampuan pengeditan baris perintah.
sumber
\o | cat > out.sql 2>&1
mengalihkan kesalahan standarcat
tetapi bukan kesalahanpsql
, jadi tidak ada gunanya untuk pemberitahuan.NOTICE
informasi?psql
, jadi mungkin tanpa masalah.client_min_message
kedebug
dalam sesi saya dan menjalankan beberapa sqls dinamis dengan (DO
- tanpa membuat fungsi apa pun), itu menimbulkan pemberitahuan di pgAdmin dengan tidak dengan psql. Saya mencetakclient_min_message
nilai sebelum mengeksekusiDO
pernyataan. Itu menunjukkandebug
, tetapi pesan tidak mencetak di konsol.Kita dapat menjalankan perintah shell langsung dari psql menggunakan
\!
perintah meta.terbuka
debug.txt
dengan\e
.naikkan pesan akan ditampilkan di editor default Anda. agak rumit, masih cukup berguna untuk pencinta commandLine.
sumber
Bukan solusi untuk Pertanyaan asli, tetapi tambahan untuk solusi OP (yang tidak berhasil untuk saya)
Dengan yang berikut ini sebagai raisTest.sql
Saya tidak yakin, mengapa menulis output ke file seperti yang tercantum dalam OP tidak bekerja, tetapi menyalurkannya ke tee benar-benar berhasil:
Tee menulis stdin menjadi satu atau lebih file dan kembali ke stdout. Jadi, Anda akan memiliki semua pernyataan RAISE di konsol Anda dan dalam file yang Anda berikan. (lih. halaman manual tee )
Konfigurasi:
sumber
NOTICE
saat Anda memasuki sesi interaktif dan gunakan\o