Skip to content

fix: 保留搬移主鍵名稱並提前拒絕命名碰撞 - #48

Merged
NickYCLin merged 1 commit into
masterfrom
fix/migration-primary-key-names
Oct 14, 2026
Merged

NickYCLin merged 1 commit into
masterfrom
fix/migration-primary-key-names

Conversation

@NickYCLin

@NickYCLin NickYCLin commented Oct 14, 2026 •

Copy link
Copy Markdown
Collaborator

後續主鍵名稱補正(不重做 PR47)

正式 PostgreSQL catalog 原本只保留 PK 欄位,user-defined constraint 被靜默重建為預設名稱後仍 Verified。本次保留實際 constraint/背後索引名稱,納入來源 fingerprint、DDL 與目標結構驗證。

  • PG → PG:保留安全名稱,ON CONFLICT ON CONSTRAINT 依賴實測可用。
  • PG → SQLite:非預設命名慣例無法保留依賴,預檢 Refused;預設命名慣例依既有跨引擎豁免處理,catalog 無法判斷恰好同名是否手動指定,文件明列此限制。
  • SQLite → PG:明確生成表名前58字元加 _pkey,預檢 table/ordinary index/PK index 共用名稱空間及截短碰撞,不讓引擎自動另取名稱。

正式來源驗證

  • 全 solution Release build:0 errors,12 項既有 nullable warnings。
  • 跨平台一般 smoke:33/33。
  • 專用、唯一名稱、localhost、tmpfs、隨機不列印密碼的自有 PG16.15 fixture:正式 catalog 新回歸通過;source constraint rename 令 fingerprint 改變並使舊確認失效、自訂名稱真正保留、ON CONFLICT 實際使用、PG→SQLite 預檢拒絕且目標空白、目標 constraint 改名故障會被結構驗證偵測並全部回滾。
  • 三種實際 SQLite catalog → PG 的預設 PK 與表名/普通索引名/長表名截短碰撞預檢拒絕,public objects=0。
  • 現有同一 focused suite 的 PG 索引預算及 SQLite↔PG fixtures 通過;不把一般 provider56/56當全方向搬移證據,1005列fault仍僅SQLite。
  • 測試已加入現有 Linux live CI suite;等待此精確 head 五項正常 CI,不重跑舊 SHA。

邊界

無 UI 變更。僅上述 PG16.15 真機與隔離SQLite;PG14/15/17、Windows UI、SSH真機、全引擎全版本矩陣不新增宣稱。無使用者資料/profile存取、無權限變更或部署。Release、版號、tag與Release-Now維持 HOLD。

原本只記錄主鍵欄位,搬移後即使自訂 constraint 被更名仍會回報驗證成功,會破壞 ON CONFLICT ON CONSTRAINT 的依賴。現在從正式 catalog 保存 constraint 與背後索引名稱,帶進預覽、確認 fingerprint、DDL 與結構驗證。

PostgreSQL 同引擎保留名稱;SQLite 目標無法忠實保留的非預設名稱在預檢拒絕。SQLite 來源產生的預設主鍵名稱也會先檢查表、一般索引與截短名称碰撞,不交給引擎靜默另取名稱。加入真 PG16.15 catalog、改名前後確認、ON CONFLICT、目標名稱故障回滾與空目標拒絕回歸。
@NickYCLin
NickYCLin merged commit 4368883 into master Oct 14, 2026
5 checks passed
@NickYCLin

Copy link
Copy Markdown
Collaborator Author

精確 head 95c0be2 的五項 CI 已成功:Windows 38521062413(240 smoke)、cross 38521062555(四平台)。Linux job115710613095 日誌包含三種實際 catalog 名稱碰撞、explicit PK catalog/DDL/fingerprint/ON CONFLICT/schema-fault/SQLite refusal 全通過,完整 provider live56/56;不等同全引擎搬移矩陣。正常合併至 master 4368883,兩者 tree 相同且遠端已核對。沒有加版號/tag/Release-Now或手動發布;等待合併後自動 CI 與 release gate 結論。

@NickYCLin

Copy link
Copy Markdown
Collaborator Author

合併後 master 4368883 的五項自動 CI 已全部成功:Windows 38521818806、cross38521818924 四平台。Linux job115713024159 也重新確認三種名稱碰撞與 explicit PK 正式 catalog/ON CONFLICT/改名故障驗證/SQLite refusal 回歸成功,33/33 與一般 provider live56/56 通過。Auto Release Gate 38521818883 的正式日誌明確 ShouldRelease=false;目前仍 v1.0.0.22,沒有 tag/發布操作,release hold 不變。實作證據在 implementation-evidence/pr48-95c0be2,未覆寫獨立 audit-evidence。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant