最近我在我的 PostgreSQL 数据库中看到了一个奇怪的场景。我的数据库的信息模式显示的序列名称与实际分配给我的表列的序列名称不同。
问题是:
我有一张桌子 tab_1
id name
1 emp1
2 emp2
3 emp3
以前,表的id
列 ( integer
) 是一个自动生成的字段,其中序列号是在运行时通过 JPA 生成的。(序列名称tab_1_seq
:)
我们进行了更改并将表的列更新id
为,bigserial
并且序列保持在列级别(分配的新序列tab_1_temp_seq
:)不再由 JPA 处理。
进行此更改后,几个月内一切正常,之后我们遇到了错误- “此会话中尚未定义序列“tab_1_temp_seq””
在分析这个问题时,我发现为表分配的序列之间存在不匹配。
在表结构中,我们将序列显示为tab_1_temp_seq
并且在information_schema
表中分配了旧序列 - tab_1_seq
。
我不确定是什么真正触发了这种情况,因为我们没有管理我们的数据库系统。如果您遇到任何此类问题,请告诉我其根本原因。
查询:
SELECT table_name, column_name, column_default from information_schema.columns where table_name = 'tab_1';
结果 :
table_name column_name column_default
tab_1 id nextval('tab_1_seq::regclass')
以下是在表结构/属性中找到的详细信息:
id nextval('tab_1_temp_seq::regclass')
name varChar