0
有簡單的插入與返回的ID如何登錄查詢單個表
INSERT INTO "public"."mytbl" ("col1", "col2" , "col3" , "col4", "col5")
values ('test', 'test' , null , 'test', null) RETURNING id;
想記錄執行時間僅此查詢。怎麼做 ?我不希望記錄所有querys,只有這一個
有簡單的插入與返回的ID如何登錄查詢單個表
INSERT INTO "public"."mytbl" ("col1", "col2" , "col3" , "col4", "col5")
values ('test', 'test' , null , 'test', null) RETURNING id;
想記錄執行時間僅此查詢。怎麼做 ?我不希望記錄所有querys,只有這一個
如果使用命令行界面psql
,你可以簡單地輸入
\timing
,並已執行完畢後,你會得到每一個發言的時間。
如果要將持續時間記錄到PostgreSQL日誌文件,可以通過設置參數log_min_duration_statement = 0
來實現。
問題是,此參數只能由超級用戶設置,並且您可能希望以不同的用戶身份運行該語句。使普通用戶登錄發言時間
一種方法是使用由超級用戶擁有的SECURITY DEFINER
功能和設置參數當前事務的持續時間:
CREATE OR REPLACE FUNCTION logduration() RETURNS void AS
'SET LOCAL log_min_duration_statement=0'
LANGUAGE sql SECURITY DEFINER;
REVOKE EXECUTE ON FUNCTION logduration() FROM PUBLIC;
GRANT EXECUTE ON FUNCTION logduration() TO laurenz;
然後用戶laurenz
可以做到以下幾點:
START TRANSACTION;
SELECT logduration();
INSERT INTO "public"."mytbl" ...
COMMIT;
你的日誌將只包含INSERT
命令的時間(當然,在funxtion通話還有持續時間,但不應該是一個問題)。