使用并发语句获取诊断ROW_COUNT

时间:2014-12-08 06:33:41

标签: postgresql concurrency plpgsql transaction-isolation

我想在plpgsql代码中使用GET DIAGNOSTICS integer_var = ROW_COUNT来获取INSERT INTO语句插入表中的行数。

如果我几乎同时运行多个INSERT INTO语句,我可以确定GET DIAGNOSTICS为每个语句正确返回插入的行数吗?

如果按照以下顺序发生,我可以用一个例子来说明这一点:

  1. 用户A运行insert into语句,将10行插入表中。
  2. 用户B运行insert into语句,在表中插入5行。
  3. 用户A拨打GET DIAGNOSTICS rowcount = ROW_COUNT;
  4. 用户B致电GET DIAGNOSTICS rowcount = ROW_COUNT;
  5. 用户A的rowcount是10,用户B是5吗?或者都会得到5?

1 个答案:

答案 0 :(得分:3)

PostgreSQL PLpgSQL 语句GET DIAGNOSTICS显示有关事务中最后一个语句的信息(在与其他用户隔离的内部事务中)。因此用户A将看到10,用户B将看到5.

PostgreSQL是ACID数据库,用户被强烈隔离(通常)。在一个会话中,您无法查看其他用户的详细工作。最大限度地看到已提交的数据更改。