我有一個PostgreSQL模式,該模式駐留在一個schema.sql文件中,該文件每次在Python中啟動數據庫連接時都會運行??雌饋硐瘢篊REATE TABLE IF NOT EXISTS users ( id SERIAL PRIMARY KEY, facebook_id TEXT NOT NULL, name TEXT NOT NULL, access_token TEXT, created TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW());該應用程序使用他們的PostgreSQL部署在Heroku上,并且一切正?!,F在,如果我想稍微更改users表的結構該怎么辦?我該怎么做最簡單,最好的方法?我想為要在數據庫ALTER...中schema.sql進行的每個更改寫一行,但是我認為這不是最好的方法,因為一段時間后,模式文件將充滿ALTERs,這將減慢我的應用程序的速度。指示對數據庫進行更改的部署方式是什么?
2 回答

慕絲7291255
TA貢獻1859條經驗 獲得超6個贊
在每個連接上運行硬編碼腳本不是處理模式管理的好方法。
您需要手動管理模式,或者使用功能強大的工具將模式版本標識符保留在數據庫中,進行檢查,并應用腳本來升級到下一個模式版本(如果該版本與最新版本不同)。Rails將此稱為“遷移”,并且可以正常工作。如果您使用的是Django,它也具有模式管理功能。
如果您不使用這樣的框架,建議您編寫自己的架構升級腳本。用單行添加“ schema_version”表。SELECT
它當應用程序第一次啟動時重新部署后,如果它比當前版本的應用程序知道較低,為了,例如應用更新腳本(S) schema_1_to_2
,schema_2_to_3
等等。
我不建議在連接時執行此操作,也不建議在應用啟動時執行此操作,或者最好將其作為特殊的維護命令執行。如果在每個連接上都執行此操作,則將有多個連接嘗試進行相同的更改,并且將出現重復的列和各種其他混亂情況。

天涯盡頭無女友
TA貢獻1831條經驗 獲得超9個贊
我使用Postgres在heroku上支持幾個django應用程序。我只是通過PgAdmin連接并在需要更改時運行腳本。我認為每次建立連接時都不需要運行腳本。
添加回答
舉報
0/150
提交
取消