为了账号安全,请及时绑定邮箱和手机立即绑定

将PostgreSQL模式更新并部署到Heroku

将PostgreSQL模式更新并部署到Heroku

catspeake 2021-04-01 05:41:48
我有一个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,这将减慢我的应用程序的速度。指示对数据库进行更改的部署方式是什么?
查看完整描述

2 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

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

您需要手动管理模式,或者使用功能强大的工具将模式版本标识符保留在数据库中,进行检查,并应用脚本来升级到下一个模式版本(如果该版本与最新版本不同)。Rails将此称为“迁移”,并且可以正常工作。如果您使用的是Django,它也具有模式管理功能。

如果您不使用这样的框架,建议您编写自己的架构升级脚本。用单行添加“ schema_version”表。SELECT它当应用程序第一次启动时重新部署后,如果它比当前版本的应用程序知道较低,为了,例如应用更新脚本(S) schema_1_to_2schema_2_to_3等等。

我不建议在连接时执行此操作,也不建议在应用启动时执行此操作,或者最好将其作为特殊的维护命令执行。如果在每个连接上都执行此操作,则将有多个连接尝试进行相同的更改,并且将出现重复的列和各种其他混乱情况。


查看完整回答
反对 回复 2021-04-06
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

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


查看完整回答
反对 回复 2021-04-06
  • 2 回答
  • 0 关注
  • 193 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信