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

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

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

最佳答案

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

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

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

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

关于python - 更新 PostgreSQL 架构并将其部署到 Heroku,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17324738/

相关文章:

python - 尝试在 Windows 10 上打开任何 Python 库时 Visual Studio Code 中的 "DLL load failed"

postgresql - 为什么 Jooq 代码生成与 PostGIS 中断?

sql - 索引 ORDER BY 与 LIMIT 1

sql - 如何使用 postgres 比较当前的部分月份与之前的部分月份?

java - 如何部署 Java 通信 API

python - 为什么我在 Flask 中收到 404 错误?

python - 高效的二维数组处理

python - 无法通过 pip 安装 Pillow

ruby-on-rails - 将静态页面部署到域根并将rails应用程序部署到子域

c# - ClickOnce 更新被用户取消,它再也不会要求更新