我正在调查 Postgres 数据库上经常执行的查询,以帮助减少 XID 的使用。我可以获取执行的查询列表以及使用pg_stat_statements
调用次数,但它不包括由于唯一约束违规等原因而失败的查询。有没有办法记录并获取这些失败查询的计数?
例:
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查询总是失败,并且如果成功执行后查询已经存在,则调用计数不会因后续失败的查询而增加,即使失败的查询导致当前XID增加。
对于一般的统计,可以看看pg_stat_database.xact_rollback。如果您想了解回滚的语句,我能想到的唯一不涉及C代码的方法是记录所有语句,然后查看日志。
如果你想深入研究C代码(或者付钱给某人),我认为在pg_stat_statements中添加回滚支持并不是非常困难,我怀疑社区会欢迎这一点。
我们有一个db2 database V9.7FP1 出现此错误消息的可能原因是什么?
问题内容: 我在应该是一个非常简单的脚本方面遇到了麻烦。我只是想使用Python pyodbc模块创建一个新的SQL Server数据库。当我在SQL Server2012中执行该参数时,我尝试传递的“ sqlcommand”参数完美运行,但是此python脚本失败了。不知道出了什么问题,有人有什么想法吗? 和错误: 问题答案: 是SQL Server ManagementStudio中的批处理终
问题内容: 如何声明用于PostgreSQL 8.3查询的变量? 在MS SQL Server中,我可以这样做: 我如何在PostgreSQL中做同样的事情?根据文档,变量被简单地声明为“名称类型;”,但这给了我一个语法错误: 有人可以给我一个正确语法的例子吗? 问题答案: PostgreSQL中没有这样的功能。您只能在pl / PgSQL(或其他pl / *)中执行此操作,而不能在普通SQL中执
我想在一条语句中更新PostgreSQL和Go中的多行。有没有办法做如下事情? 还有有没有一个例子,如果用go语言执行?
问题内容: 可以说我有这样的第一张桌子 分支表 第二张桌子是这样的 余额表 我想查询余额表,其中每一行包含分支表的名称。例如分支表中的“ 123456ABC”,我想从余额表中获取“ ABC”行 我怎样才能做到这一点?到目前为止,我还没有尝试过这个查询 有什么建议吗? 问题答案: 你应该 转换 了的名称模式: 联接看起来更易读:
问题内容: 编辑:我更改了名称,因为存在类似的SO问题如何在添加大查询时解决SpreadSheetAddRows函数崩溃的问题?在那里描述了我的问题,所以我更简洁地表达了自己的看法……问题是电子表格Addrows,我的查询结果以我认为合适的大小(1600行,27列)轰炸了整个服务器,但听起来比他的18,000行少了很多 我正在使用通过Coldfusion 9.0.1 cfstoredproc访问的