Postgresql
是否有從 PostgreSQL 的 C 函式中列印/調試的方法?
當您在 C 中擴展 PostgreSQL 時,如何自省/調試/轉儲變數?除了將自定義結果集返回給客戶端之外,還有其他方法嗎?
printf
我可以在伺服器或客戶端的日誌中收到類似的東西?
在 PostgreSQL 的文件頁面中記錄了一些方法,用於錯誤日誌報告,有較舊的方法
elog
和較新的方法ereport
elog(level, "format string", ...);
ereport(level, errmsg_internal("format string", ...));
level
可以設置為ERROR
,和WARNING
whereNOTICE
中止ERROR
執行。對他們的指導是
因此,
elog
應該只用於內部錯誤和低級調試日誌記錄。任何普通使用者可能感興趣的消息都應該通過ereport
。elog
儘管如此,仍然廣泛使用的系統中有足夠的內部“不可能發生”錯誤檢查;由於其符號簡單,它是那些消息的首選。有更多關於 ereport 的“輔助常式”的資訊,它允許您指定
errcode
,errmsg
(和復數),errmsg_internal
,errdetail
(和復數),errdetail_internal
,errdetail_log
(和復數),errhint
(和復數),errcontext
,errposition
,errtable
,errtablecol
,errtableconstraint
,errdatatype
,errdomainconstraint
,errcode_for_file_access
,errcode_for_socket_access
,errhidestmt
,和errhidecontext
。您也可以簡單地使用
printf("Hello World! %d", myInt);
你會在你的伺服器日誌中看到結果,
/var/log/postgresql/postgresql-13-main.log
使用 elog 比使用 printf 可能更好。這樣您就可以免費獲得日誌系統的所有功能。
elog(NOTICE, "Hello World! %d", myInt);
除了 NOTICE,您還可以使用 INFO、LOG、WARN、DEBUG1 等。