#21255·bytebase

[PG] 当表中有删除的列时,身份列所拥有的序列会被错误归属

作者: CHOIHYOUNSEUNG创建于 2026年8月27日更新于 2026年9月3日

提供您正在使用的 Bytebase 版本

3.2.1.1 (自办,Docker,嵌入式PostgreSQL)

描述错误

Schema change ** tab 使视觉 diff 正确,但 ** Generated DDL 语句 标签失败:

代码13:内部
[内部] 无法计算 schema diff: 无法装入源代码 :
错误: 序列“ 菜单  group  id seq” 已经存在( SQLSTATE 42710)

输出的 schema 两次发出相同的序列——一次作为独立的序列,一次通过桌上的身份条款:

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? -- 1. 作为单独序列排放 CREATE SEQENCE "app". menu group id seq" AS Bigint (英语). 1分钟前启动 922327303685475807 无Cycle Cache 1;

    1. 根据身份条款创造了第二次 CREATE 表"应用". menu group (中文(简体) ). “ col 01” 字符不同(7) Not NULL, . . . . . . . . "id" bigint Generated always as identity, -- 又创建菜单 组 id seq "Col 13"字符(1) DEFAULT 'N'::bpchar, "Col 14"字符(1) DEFAULT 'N'::bpchar, "Col 15"字符(1) DEFAULT 'N'::bpchar, INTRAINT "菜单 group pk" PriMARI 关键字(id,), INTRAINT "menu group uk" UNIQUE (col 01, col 02, col 03, col 04) (中文(简体) ). (三)

-- 3. 所有权点错一栏 (原始内容存档于2018-10-26). ALTER SEQENCE"app". menu group id seq" 由"app"拥有. menu group". "col 14"; 由"app".


重放这在第二步失败,因为第一步已经创建了序列.

** Root cause.** `pg dependent.refobjsubid'是一个**atnum**,但似乎在可见列列表中作为**ordinal 位置**解决. 两者在表上抛出柱子后立即相去甚远,因为被抛出柱子时保持了它们的分数.

受影响表格的目录状态(名称为匿名):

已丢弃的可见位置 1 col 01 假 1 2 col 02 假 2 3 col 03 假 3 4 col 04 假 4 5 col 05 假相 5 6... ...... pg. dropped 6.... ...... ...真 - < - - 降下 7 col 06 假 6 8... ...... ...... 9 col 07 假名 7 10 col 08 假 8 11 col 09 假 9 12 col 10 假 10 13 col 11 假 11 14 col 12 虚假 12 15 id false 13 < -- -- 真实拥有者 16 col 13 假 14 17 col 14 false 15 < -- 在 Owned BY中命名 18 col 15 假相 16


- " id " 有** atnum 15**,但为**13可见**栏。
- **15可见**栏为`col 14'——确切的是什么?
. . . . . . .

内容来源: bytebase/bytebase