Sqlite

sqlite 可以按固定順序轉儲數據庫模式嗎?

  • July 17, 2021

我正在使用SQLiteStudio 3.0.7 定期轉儲數據庫模式以進行版本控制,並且它似乎隨機更改了表定義的順序。這對差異造成了嚴重破壞,因為即使是像添加一兩個額外列這樣的小變化似乎也會導致到處都是瘋狂的差異。當它只是應該顯示的行差異時,並排比較可能會導致整個表格被單獨列出。

可以將 SQLiteStudio 配置為正確執行此操作。還是 sqlite 本身可以以固定格式的方式執行相同的模式導出?

SQLiteStudio 按類型(表、索引、觸發器、視圖)對數據庫對象進行排序,但在每個組內,對它們進行隨機排序。(如果您認為這是一個錯誤,請報告它。)

shell按照sqlite3它們在表中的儲存順序轉儲表sqlite_master,這通常與它們被(重新)創建的順序相同。

要獲得一致排序的模式轉儲輸出,您可能需要自己手動處理輸出。為此,我製作了一個小幫助腳本:

#!/bin/bash
db=the_database.db
for table in $(sqlite3 $db "select name from sqlite_master where type = 'table' order by name"); do
   sqlite3 $db ".schema $table" | grep 'CREATE TABLE' | grep -v 'sqlite_sequence('
   sqlite3 $db ".schema $table" | grep -v 'CREATE TABLE' | sort
done

做我想要的,但不能保證正確性。然而,每個相應表的列的順序仍然可以變化。

引用自:https://dba.stackexchange.com/questions/128839