Database Postgres转储Alter查询
我对postgres很陌生,很早以前就对来自MySQL的SQL感到生疏 我想要实现的是使用现有的数据库结构生成一个转储文件,然后我可以使用该文件将更改部署到一个可能包含或不包含该数据库的环境中 我假设这意味着转储可能包括以下内容:Database Postgres转储Alter查询,database,postgresql,Database,Postgresql,我对postgres很陌生,很早以前就对来自MySQL的SQL感到生疏 我想要实现的是使用现有的数据库结构生成一个转储文件,然后我可以使用该文件将更改部署到一个可能包含或不包含该数据库的环境中 我假设这意味着转储可能包括以下内容: 空条件为所有表创建查询(条件为“if not exists”…) 所有字段的条件ALTER查询 有条件的ALTER查询所有约束和键(主约束和其他约束) 我现在对转储数据不感兴趣 显然,这需要能够在不存在数据库的情况下创建数据库结构,但我主要感兴趣的是在数据库已经存
- 空条件
查询(条件为“if not exists”…)为所有表创建
- 所有字段的条件
查询ALTER
- 有条件的
查询所有约束和键(主约束和其他约束)ALTER
- 一种简单的方法,或者
- 这是不这样做的一个很好的理由
请提供上述其中一项作为答案。:) 通常情况下,您可以首先自动化更改,然后在部署到每个实例时应用相同的自动化。像Liquibase这样的工具可以帮助你 有很多很好的理由没有按照你所描述的那样去做:
- 有些事情,如列数据类型的更改,很难用这种方式处理。您可以使用(NULLIF(trim(column)::integer,)将列从
更改为text
,,以去除空白并将integer
转换为'
。垃圾场怎么会知道这样做NULL
- 有时,一个变化似乎没有净效应,但实际上是非常重要的<代码>删除表mytable;CREATE TABLE mytable(…)与ALTER TABLE mytable…非常不同,因为它会破坏数据,但当您仅查看数据库状态时,您看不到这一点
- 有时,当你观察状态A和B时,很难判断从A到B实际上需要什么转换。可能有很多方法可以做到这一点,或者不经过一些不明显的中间状态是不可能的
使用模式版本控制工具,这些工具可以基于已知的起始模式版本和定义良好的转换(迁移)集,以可控的方式进行一系列更改。有些框架内置了这样的功能。对于其他人,您可以使用Liquibase等工具。您需要将其集成到开发周期中,只需通过版本控制下的脚本对数据库进行更改即可。Liquibase是一个很好的工具来管理这样的模式迁移代码>一个diff工具能够(也将要)做的唯一事情就是生成一个
drop table foo
和一个create table bar