Database 如何在Postgres sql中执行过程、视图和函数的版本控制
我想对我的数据库进行版本控制 我目前通过git控制我的前端应用程序,但是我正在创建我的数据库,并且希望对我的表、函数和过程进行版本控制,我如何为数据库实现这一点?Database 如何在Postgres sql中执行过程、视图和函数的版本控制,database,postgresql,Database,Postgresql,我想对我的数据库进行版本控制 我目前通过git控制我的前端应用程序,但是我正在创建我的数据库,并且希望对我的表、函数和过程进行版本控制,我如何为数据库实现这一点? 也就是说,我将对函数进行更改,但我希望保存我正在执行的前一个函数,以防我再次放置前一个函数时出现任何问题。用于数据库结构版本控制(包括可选数据迁移)的主要工具有: 然而,您的问题的细节超出了现有工具目前提供的范围 如果需要数据库中某个对象的两个或多个版本以供并行使用(例如,表、触发器、aso的逐步迁移),最好使用以下任一方法:
也就是说,我将对函数进行更改,但我希望保存我正在执行的前一个函数,以防我再次放置前一个函数时出现任何问题。用于数据库结构版本控制(包括可选数据迁移)的主要工具有:
my_cool\u function\u v2
与my_cool\u function\u v3
创建函数my\u schema\u v2。my\u cool\u函数
不会与my\u schema\u v1.my\u cool\u函数
将搜索路径设置为my_schema_v2,my_schema_v1,public;
动态地(在不影响实际应用程序/用户的情况下用于在实时系统中进行测试),并且一旦您确信基本设置就绪,就将其包括在PostgreSQL配置中(PostgreSQL.conf
),以便新模式成为每个新连接的标准:
search_path = 'my_schema_v2, my_schema_v1, public'
迁移所有新对象且一切正常后,可以从搜索路径中删除旧的my_schema\u v1
,也可以删除DROP。。。级联
it以一次删除所有旧对象
然而,模式方法的一个缺点是,如果您总是在所有模式中创建所有对象(函数、触发器、表等等),那么当与搜索路径
结合使用时,您将失去它的好处。因此,我会为不同的对象创建不同的模式,例如数据(表、索引等)的data\u v1
,以及其他事物(函数、过程等)的func\u v1
。通过这种方式,您可以独立于数据发展结构,但同时,您也可以开始发展表结构,并自动从功能的修复/改进中获益,还可以测试更改是否向前兼容。您好,本Q的未来读者,我是project的维护者:一个模式版本控制和迁移工具,您可以在没有依赖关系的情况下运行它。在所描述的场景中,大多数工具都将数据库中的每个更改视为不可变或原子更改,如果您需要回滚更改,那么它将只是另一个次要或主要版本。通过这种方式,您可以随时随地完全重构数据库,同时跟踪数据库模式的演变
在yuniql中,您的工作区通常是这样组织的
v0.00
+ create_schema.sql
+ create_table_customers.sql
v0.01
+ create_table_custmomers_with_contact.sql
v0.02
+ create_table_custmomers_with_picture.sql
您可以参考github了解入门和示例;)
Br,Rodel将SQL脚本放入Git或Subversion,就像其他源代码一样。使用Liquibase或Flyway之类的工具来运行迁移