【问题标题】:Update and deploy PostgreSQL schema to Heroku更新 PostgreSQL 架构并将其部署到 Heroku
【发布时间】:2013-06-23 20:49:32
【问题描述】:

我有一个 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 表的结构怎么办?我怎样才能以最简单和最好的方式做到这一点?我想在schema.sql 中为我想在数据库中产生的每个更改写一个ALTER... 行,但我认为这不是最好的方法,因为一段时间后架构文件将充满ALTER s,它会减慢我的应用程序。

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

【问题讨论】:

    标签: python postgresql deployment heroku


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 这是一个好点。我使用 Flask 作为框架,我没有看到任何用于处理模式的扩展。可能我会写一个我自己的模块。谢谢!
    • @linkyndy 先尝试搜索。 30 多岁的谷歌搜索“烧瓶迁移”发现了足够的信息,很明显其他人已经尝试做同样的事情。不要重新发明轮子,向他们学习。参见,例如,mattupstate.com/python/databases/2012/11/15/…
    【解决方案2】:

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

    【讨论】:

    • 我没有安装 PgAdmin。还有哪些其他可用的解决方案?
    • 你可以使用 psql 客户端,但如果你打算使用 Postgres,我建议安装 pgAdmin。它是免费的,适用于 Windows、Linux 和 Mac OSX。
    • @DavidS 有趣的是偏好不同 - 我只使用psql,发现 PgAdmin-III 让我有点发疯。
    • @CraigRinger 我用 psql 做一些事情。但是,我发现如果你有一个复杂的数据库,那么它会有多个模式和函数等,我更容易在它周围导航。给每个他/她自己的。我提出 pgAdmin 的建议是因为我的直觉是他们的 OP 不是数据库专家,他们的 UI 可能会有所帮助。这只是我的直觉。
    • @CraigRinger - 不久前,我开始努力学习更多 psql 命令(例如 \dt),现在我不得不说,我使用它比 pgAdmin 更多。学习这点绝对值得。
    猜你喜欢
    • 1970-01-01
    • 2021-05-30
    • 2014-03-29
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    相关资源
    最近更新 更多