Postgresql
使用他執行的查詢記錄使用者的 ID
因此,當他呼叫函式時,我不僅嘗試記錄 postgres 使用者,還嘗試從我的表中記錄他的 ID(例如)Person (person_id)。
到目前為止,據我所知,我幾乎可以從這些系統表中獲得所需的所有資訊:
pg_stat_activity
pg_stat_statements
如果我啟動它(但由於某些限制可能無法啟動)但我似乎無法弄清楚的部分是我是否想從(例如)使用者表(
user_id
例如)記錄使用者的 ID。基本上我想創建一個只存放上個月日誌的小表,我將插入其中。
- user_id (不是系統 id,而是來自我自己的表)
- IP地址
- 他呼叫函式/查詢時的時間戳記
- 他執行的查詢
我的主要問題是 user_id 部分,因為其他 3 個值已經存在於
pg_stat_activity
(client_addr
,query_start
,query
)如果沒有簡單的方法來實現這一點,假設我想創建一個函式,該函式將根據返回的參數以某種方式選擇 user_id
pg_stat_activity
,但我似乎無法弄清楚我將如何做到這一點。隱藏的表參數tableoid, cmin, cmax, xmin, xmax, ctid
在這裡對我沒有幫助,至少我看不到如何,也許我錯過了什麼?
根據您的評論,
INSERT
可能看起來像這樣:INSERT INTO log (userid, clientaddr, calltime, query) SELECT user_id, -- function argument a.client_addr, a.query_start, a.query FROM pg_stat_activity AS a WHERE a.pid = pg_backend_pid();
辨識目前會話的關鍵是後端程序的程序ID。
pg_stat_activity 有 application_name。您可以使用它來附加 person_id。在每個查詢之前,您可以在查詢下方執行
set application_name to my_application-<person_id>;
我們使用這種方式來記錄觸發查詢的 user_id 和模組。如果您以日誌格式指定,此 application_name 也會記錄在實際日誌中。