猿问

将PostgreSQL模式更新并部署到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()

);

该应用程序使用他们的PostgreSQL部署在Heroku上,并且一切正常。


现在,如果我想稍微更改users表的结构该怎么办?我该怎么做最简单,最好的方法?我想为要在数据库ALTER...中schema.sql进行的每个更改写一行,但是我认为这不是最好的方法,因为一段时间后,模式文件将充满ALTERs,这将减慢我的应用程序的速度。


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


catspeake
浏览 194回答 2
2回答

慕丝7291255

在每个连接上运行硬编码脚本不是处理模式管理的好方法。您需要手动管理模式,或者使用功能强大的工具将模式版本标识符保留在数据库中,进行检查,并应用脚本来升级到下一个模式版本(如果该版本与最新版本不同)。Rails将此称为“迁移”,并且可以正常工作。如果您使用的是Django,它也具有模式管理功能。如果您不使用这样的框架,建议您编写自己的架构升级脚本。用单行添加“ schema_version”表。SELECT它当应用程序第一次启动时重新部署后,如果它比当前版本的应用程序知道较低,为了,例如应用更新脚本(S) schema_1_to_2,schema_2_to_3等等。我不建议在连接时执行此操作,也不建议在应用启动时执行此操作,或者最好将其作为特殊的维护命令执行。如果在每个连接上都执行此操作,则将有多个连接尝试进行相同的更改,并且将出现重复的列和各种其他混乱情况。

天涯尽头无女友

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

相关分类

Python
我要回答