gpt4 book ai didi

postgresql - 为什么即使在调用 nextval 之后 pgsql 仍声称序列的 currval 未定义?

转载 作者:行者123 更新时间:2023-11-29 12:44:52 24 4
gpt4 key购买 nike

我正在使用 PostgresQL 数据库,其中触发函数将更改记录到历史表中。我正在尝试添加一个保留逻辑“提交 ID”的列,以将主记录和详细记录组合在一起。我已经创建了一个(非临时的)序列,并且在我开始批量更新之前,我会碰到这个。我所有的 SQL 都记录到日志文件中,因此您可以清楚地看到发生了什么:

2015-04-16 10:43:37 SQLSelect: SELECT nextval('commit_id_seq')
2015-04-16 10:43:37 commit_id_seq: 8

...但随后我尝试更新,我的触发器函数尝试使用 currval,但它失败了:

2015-04-16 10:43:37 ERROR: ERROR:  currval of sequence "commit_id_seq" is not yet defined in this session
CONTEXT: SQL statement "INSERT INTO history (table_name, record_id, sec_user_id, created, action, notes, status, before, after, commit_id)
SELECT TG_TABLE_NAME, rec.id, (SELECT oid FROM pg_roles WHERE rolname = CURRENT_USER), now(), SUBSTR(TG_OP,1,1), note, stat, hstore(old), hstore(new), currval('commit_id_seq')"
PL/pgSQL function log_to_history() line 18 at SQL statement
[3]

所以我的问题基本上是:WTF?

最佳答案

两个原因之一:

  1. Search_path 差异,所以您实际上是在谈论两个不同的序列。
  2. 不同的 session 。 “当前值”仅为您在其中调用 nextval() 的 session 定义。

您可以在日志文件格式中添加 process-id 以检查它们是否是不同的 session 。

关于postgresql - 为什么即使在调用 nextval 之后 pgsql 仍声称序列的 currval 未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29681207/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com