Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何在Postgres sql中执行过程、视图和函数的版本控制_Database_Postgresql - Fatal编程技术网

Database 如何在Postgres sql中执行过程、视图和函数的版本控制

Database 如何在Postgres sql中执行过程、视图和函数的版本控制,database,postgresql,Database,Postgresql,我想对我的数据库进行版本控制 我目前通过git控制我的前端应用程序,但是我正在创建我的数据库,并且希望对我的表、函数和过程进行版本控制,我如何为数据库实现这一点? 也就是说,我将对函数进行更改,但我希望保存我正在执行的前一个函数,以防我再次放置前一个函数时出现任何问题。用于数据库结构版本控制(包括可选数据迁移)的主要工具有: 然而,您的问题的细节超出了现有工具目前提供的范围 如果需要数据库中某个对象的两个或多个版本以供并行使用(例如,表、触发器、aso的逐步迁移),最好使用以下任一方法:

我想对我的数据库进行版本控制

我目前通过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之类的工具来运行迁移