GET DIAGNOSTICS ROW_COUNT 并发语句

Tho*_*mas 3 postgresql concurrency plpgsql transaction-isolation

我想GET DIAGNOSTICS integer_var = ROW_COUNT在 plpgsql 代码中使用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;

用户 A 会得到rowcount10 分而用户 B 会得到 5 分吗?或者两者都会得到5?

Pav*_*ule 5

PostgreSQL PLpgSQL语句GET DIAGNOSTICS显示有关事务中最后一条语句的信息(在事务内部,您与其他用户隔离)。所以用户 A 会看到 10,用户 B 会看到 5。

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