PostgreSQL:在嵌套select中调用时不更新记录的函数

PostgreSQL:在嵌套select中调用时不更新记录的函数,postgresql,plpgsql,Postgresql,Plpgsql,我有一个plpgsql函数更新PostgreSQL 11数据库中的记录。目标是更改记录ID和引用它的所有外键: 创建或替换函数REPLACE_nipold_nip字符变化、新_nip字符变化 返回整数 语言plpgsql 作为$function$ 声明 nb_nips_found int; 开始 提出通知“NIP替换:%,新NIP:%”,旧NIP,新NIP; 选择将nip计数到找到的nb\U nip\U中 来自患者的数据,其中nip=新nip; 如果nb_nips_found>0,则 提出“新N

我有一个plpgsql函数更新PostgreSQL 11数据库中的记录。目标是更改记录ID和引用它的所有外键:

创建或替换函数REPLACE_nipold_nip字符变化、新_nip字符变化 返回整数 语言plpgsql 作为$function$ 声明 nb_nips_found int; 开始 提出通知“NIP替换:%,新NIP:%”,旧NIP,新NIP; 选择将nip计数到找到的nb\U nip\U中 来自患者的数据,其中nip=新nip; 如果nb_nips_found>0,则 提出“新NIP已经存在,不做任何事情”的通知; 其他的 提出“NIP将被替换”的通知; -临时禁用约束,直到事务结束 设置所有延迟的约束条件; 更新数据预设置PRV\U NIP=新的,其中PRV\U NIP=旧的; 更新数据信息集NIP=新NIP,其中NIP=旧NIP; 更新数据集NIP=新NIP,其中NIP=旧NIP; - ... -很多其他的更新。。。 - ... 更新数据\u信息\u患者集NIP=新NIP,其中NIP=旧NIP; 如果结束; 返回找到的nb_nip_; 终止 $function$ ; 当我调用它来更新单个记录时,如下所示:

选择替换_nip'123456789'、'987654321'; 它工作了,我得到了0作为结果退出代码,这意味着已经完成了替换,并且记录得到了很好的更新

但由于我有很多记录要更新,我创建了一个表,其中包含新旧ID的列表:

Table tmp_nip_old_new:

|old_nip        |new_nip        |
|---------------|---------------|
| 0000000002    |9999999992     |
| 0000000003    |9999999993     |
| 0000000004    |9999999994     |
| 0000000005    |9999999995     |
我这样调用函数:

从中选择旧夹点、新夹点、替换夹点、新夹点作为结果 选择旧夹点、新夹点 来自tmp_nip_old_new 作为tmp_nip; 我得到了预期的结果:

|old_nip        |new_nip        |result     |
|---------------|---------------|-----------|
| 0000000002    |9999999992     |0          |
| 0000000003    |9999999993     |0          |
| 0000000004    |9999999994     |0          |
| 0000000005    |9999999995     |0          |
但是记录没有更新


我做错了什么?谢谢。

您看到加薪通知消息的预期次数了吗?@Jeremy是的,我看到消息的预期次数了……您是否可能没有提交更改?@Jeremy否,我使用Dbeaver,并且自动提交设置为true。我还直接尝试了psql,结果是一样的。嗯,我不知道发生了什么,我什么都没做,只是关闭并重新启动了postges实例,但今天早上它按预期工作。。。