我有一个PostgreSQL架构,它驻留在schema.sql
文件中,每次在Python中启动数据库连接时都会运行该文件。它看起来像:
CREATE 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()
);
该应用程序部署在Heroku上,使用他们的PostgreSQL,一切都按预期工作。
现在,如果我想改变users
表的结构怎么办?我怎样才能以最简单,最好的方式做到这一点?我想在ALTER...
中为我想在数据库中生成的每个更改编写schema.sql
行,但我不认为这是最好的方法,因为经过一段时间后,模式文件将满ALTER
的{{1}},它会减慢我的应用。
部署对数据库所做的更改的指示方式是什么?
答案 0 :(得分:3)
在每个连接上运行硬编码脚本不是处理模式管理的好方法。
您需要手动管理架构,或者使用成熟的工具在数据库中保留架构版本标识符,检查并运行脚本以升级到下一个架构版本(如果它与最新版本不同) 。 Rails将这种“迁移”称为“迁移”,并且它很有用。如果你正在使用Django,它也有模式管理。
如果您没有使用这样的框架,我建议您编写自己的架构升级脚本。添加带有单行的“schema_version”表。 SELECT
当应用程序在重新部署后首次启动时,如果它低于应用程序所知的当前版本,请按顺序应用更新脚本,例如schema_1_to_2
,schema_2_to_3
,等
我不建议在连接上执行此操作,在应用启动时执行此操作,或者更好,作为特殊维护命令。如果你在每个连接上都这样做,你会有多个连接尝试进行相同的更改,你会看到重复的列和各种其他混乱。
答案 1 :(得分:0)
我使用Postgres在heroku上支持几个django应用程序。我只是通过PgAdmin连接并在需要更改时运行我的脚本。我发现每次建立连接时都不需要运行脚本。