2016-07-06 56 views
0

有簡單的插入與返回的ID如何登錄查詢單個表

INSERT INTO "public"."mytbl" ("col1", "col2" , "col3" , "col4", "col5") 
values ('test', 'test' , null , 'test', null) RETURNING id; 

想記錄執行時間僅此查詢。怎麼做 ?我不希望記錄所有querys,只有這一個

回答

0

如果使用命令行界面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通話還有持續時間,但不應該是一個問題)。