更新PostgreSQL架构并将其部署到Heroku

时间:2013-06-26 15:48:44

标签: python postgresql deployment heroku

我有一个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}},它会减慢我的应用。

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

2 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:0)

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