Postgresql

是否有從 PostgreSQL 的 C 函式中列印/調試的方法?

  • November 6, 2021

當您在 C 中擴展 PostgreSQL 時,如何自省/調試/轉儲變數?除了將自定義結果集返回給客戶端之外,還有其他方法嗎?printf我可以在伺服器或客戶端的日誌中收到類似的東西?

在 PostgreSQL 的文件頁面中記錄了一些方法,用於錯誤日誌報告,有較舊的方法elog和較新的方法ereport

  • elog(level, "format string", ...);
  • ereport(level, errmsg_internal("format string", ...));

level可以設置為ERROR,和WARNINGwhereNOTICE中止ERROR執行。

對他們的指導是

因此,elog應該只用於內部錯誤和低級調試日誌記錄。任何普通使用者可能感興趣的消息都應該通過ereportelog儘管如此,仍然廣泛使用的系統中有足夠的內部“不可能發生”錯誤檢查;由於其符號簡單,它是那些消息的首選。

有更多關於 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 等。

引用自:https://dba.stackexchange.com/questions/301831