2

我有一个 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()
);

该应用程序使用他们的 PostgreSQL 部署在 Heroku 上,一切都按预期工作。

现在,如果我想稍微改变一下users表的结构怎么办?我怎样才能以最简单和最好的方式做到这一点?我想为我想在数据库中产生的每个更改写ALTER...一行schema.sql,但我认为这不是最好的方法,因为一段时间后架构文件将充满ALTERs 并且它会减慢我的应用程序。

部署对数据库所做的更改的指示方法是什么?

4

2 回答 2

3

在每个连接上运行硬编码脚本并不是处理模式管理的好方法。

您需要手动管理架构,或者使用成熟的工具在数据库中保留架构版本标识符,检查它,并应用脚本升级到下一个架构版本(如果它与最新版本不同)。Rails 称其为“迁移”,它有点工作。如果您使用的是 Django,它也有模式管理。

如果您不使用这样的框架,我建议您编写自己的架构升级脚本。添加具有单行的“schema_version”表。SELECT当应用程序在重新部署后首次启动时,如果它低于应用程序知道的当前版本,则按顺序应用更新脚本,例如schema_1_to_2schema_2_to_3等。

我不建议在连接时执行此操作,在应用程序启动时执行此操作,或者更好的是,作为特殊维护命令。如果您在每个连接上都这样做,您将有多个连接尝试进行相同的更改,并且您会遇到重复的列和各种其他混乱。

于 2013-06-26T23:44:40.777 回答
0

我用 Postgres 支持 heroku 上的几个 django 应用程序。我只是通过 PgAdmin 连接并在需要更改时运行我的脚本。我认为每次建立连接时都不需要运行脚本。

于 2013-06-26T16:01:27.150 回答