2016-03-22 11 views
2

私はPostgresデータベースでよく実行されるクエリを調査して、XIDの使用を減らしています。実行されたクエリの一覧とpg_stat_statementsを使用している呼び出しの数を取得できますが、一意の制約違反などの理由で失敗したクエリは含まれません。これらの失敗したクエリを記録してカウントする方法はありますか?PostgreSQLの失敗したクエリでXIDを使用する

例:それは常に失敗し、クエリがすでに正常に実行されるから存在している場合、呼び出し回数がインクリメントされることはありませんならばわかるように

test_xid=# \d test 
    Table "public.test" 
Column | Type | Modifiers 
--------+---------+----------- 
id  | integer | not null 
Indexes: 
    "test_pkey" PRIMARY KEY, btree (id) 

test_xid=# truncate test; 
TRUNCATE TABLE 
test_xid=# select pg_stat_statements_reset(); 
pg_stat_statements_reset 
-------------------------- 

(1 row) 

test_xid=# select txid_current(); 
txid_current 
-------------- 
     224547 
(1 row) 

test_xid=# insert into test(id) values (1); 
INSERT 0 1 
test_xid=# insert into test(id) values (1); 
ERROR: duplicate key value violates unique constraint "test_pkey" 
DETAIL: Key (id)=(1) already exists. 
test_xid=# insert into test(id) values (1); 
ERROR: duplicate key value violates unique constraint "test_pkey" 
DETAIL: Key (id)=(1) already exists. 
test_xid=# insert into test(id) values (1); 
ERROR: duplicate key value violates unique constraint "test_pkey" 
DETAIL: Key (id)=(1) already exists. 
test_xid=# select txid_current(); 
txid_current 
-------------- 
     224552 
(1 row) 

test_xid=# select query, calls from pg_stat_statements; 
       query    | calls 
------------------------------------+------- 
insert into test(id) values (?); |  1 
select pg_stat_statements_reset(); |  1 
select txid_current();    |  2 
(3 rows) 

test_xid=# select pg_stat_statements_reset(); 
pg_stat_statements_reset 
-------------------------- 

(1 row) 

test_xid=# insert into test(id) values (1); 
ERROR: duplicate key value violates unique constraint "test_pkey" 
DETAIL: Key (id)=(1) already exists. 
test_xid=# select query, calls from pg_stat_statements; 
       query    | calls 
------------------------------------+------- 
select pg_stat_statements_reset(); |  1 
(1 row) 

、INSERTクエリはpg_stat_statmentsには表示されません失敗したクエリが現在のXIDを増加させるにもかかわらず、その後に失敗したクエリ。

答えて

0

一般的な統計情報は、pg_stat_database.xact_rollbackを参照してください。ロールバックされた文について知りたいのであれば、Cコードを含まないと思う唯一のことはすべての文をロギングしてからログを調べることだけです。

もしあなたがCコードに潜入したいなら(あるいは誰かに支払う)、私はpg_stat_statementsにロールバックサポートを追加することは非常に難しくないと思います。コミュニティがそれを歓迎すると思います。

関連する問題