Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.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
Php 如何储存&;部署关系数据块?_Php_Postgresql_Testing_Deployment - Fatal编程技术网

Php 如何储存&;部署关系数据块?

Php 如何储存&;部署关系数据块?,php,postgresql,testing,deployment,Php,Postgresql,Testing,Deployment,我有一个Postgres DB,其中包含分布在多个表中的一些配置数据。 在将这些配置部署到生产系统之前,需要对其进行测试。 现在我正在寻找一种方法 在SVN中存储单个配置对象及其子实体,以及 将此对象和子实体部署到不同的目标数据库 关键是,需要以某种方式维护对象之间的关系,而不使用实际id,这会在将数据复制到另一个DB时导致冲突 例如,如果数据库包含关于音乐艺术家、专辑和曲目的数据,并具有简单的树表模式,如artist->has albums->has tracks,则我正在寻找的解决方案将允许

我有一个Postgres DB,其中包含分布在多个表中的一些配置数据。 在将这些配置部署到生产系统之前,需要对其进行测试。 现在我正在寻找一种方法

  • 在SVN中存储单个配置对象及其子实体,以及
  • 将此对象和子实体部署到不同的目标数据库
  • 关键是,需要以某种方式维护对象之间的关系,而不使用实际id,这会在将数据复制到另一个DB时导致冲突

    例如,如果数据库包含关于音乐艺术家、专辑和曲目的数据,并具有简单的树表模式,如artist->has albums->has tracks,则我正在寻找的解决方案将允许导出,例如,一个选定的专辑包含所有曲目(或一个艺术家包含所有曲目的所有专辑)将其存储到一个文件中,然后将其“部署”到具有相同模式的任何数据库中

    我正在考虑自己实现一些东西,例如,有一个描述依赖关系的配置文件,还有一个用PHP变量替换id并生成某种PHP-SQL插入或更新脚本的导出脚本。
    但后来我想,如果之前不要求再次检查这样的东西是否已经存在,那将是非常愚蠢的:o)

    这是自然键的一个论点。专辑有一位艺术家,由曲目组成。无需“id”将这些信息链接在一起,只需使用名称即可。Perl风格的数据文件示例:

    "Bob Artist" => {
        "First Album" => ["My Best Song", "A Slow Song",],
        "Comeback Album" => ["One-Hit Wonder", "ORM Blues",],
    }, "Noname Singer" => {
        "Parse This Record!" => ["Song Named 'D'",],
    }
    

    要添加数据,只需遍历树,根据父级数据的每个级别创建INSERT语句,如果必须创建INSERT语句,则在每个INSERT语句末尾使用“RETURNING id”(PostgreSQL扩展名),以获取自动生成的id,并将其传递到树的下一个级别。

    这是自然键的参数之一。专辑有一位艺术家,由曲目组成。无需“id”将这些信息链接在一起,只需使用名称即可。Perl风格的数据文件示例:

    "Bob Artist" => {
        "First Album" => ["My Best Song", "A Slow Song",],
        "Comeback Album" => ["One-Hit Wonder", "ORM Blues",],
    }, "Noname Singer" => {
        "Parse This Record!" => ["Song Named 'D'",],
    }
    

    要添加数据,只需遍历树,根据父级数据的每个级别创建INSERT语句,如果必须创建INSERT语句,则在每个INSERT语句末尾使用“RETURNING id”(PostgreSQL扩展名),以获取自动生成的id,并将其传递到树中的下一个级别。

    我同意Matthew的建议。作为对该概念的改进,您可能希望创建“派生自然关键点”,例如“bob艺术家”的“bob_艺术家”。例如,当将记录存储到svn中时,派生的自然密钥非常适合作为文件名


    应生成派生自然密钥,以使任意两个不同的自然密钥产生不同的派生自然密钥。这样,独立数据集之间就不会发生冲突。

    我同意马修的建议。作为对该概念的改进,您可能希望创建“派生自然关键点”,例如“bob艺术家”的“bob_艺术家”。例如,当将记录存储到svn中时,派生的自然密钥非常适合作为文件名


    应生成派生自然密钥,以使任意两个不同的自然密钥产生不同的派生自然密钥。这样,独立数据集之间就不会发生冲突。

    Rails迁移的概念似乎是相关的,尽管其主要目的是执行模式更新:

    这个想法已经被转换成PHP,名称为Ruckusing,但目前似乎只支持mySQL:

    原则还提供迁移功能,但似乎再次将重点放在架构转换上,而不是迁移或部署数据:


    可能会使用(滥用?)喧闹或条令,或者如果需要修改/扩展以完成工作?

    Rails迁移的概念似乎很相关,尽管它主要用于执行模式更新:

    这个想法已经被转换成PHP,名称为Ruckusing,但目前似乎只支持mySQL:

    原则还提供迁移功能,但似乎再次将重点放在架构转换上,而不是迁移或部署数据:


    可能会使用(滥用?)喧闹或条令,或者如果需要修改/扩展来完成工作?

    我试图澄清:我寻找一个现有的解决方案,最好是Postgres&PHP,它允许将这些数据导出到可用于插入或更新的文件中。与mySQL不同的是,Postgres不知道在重复密钥更新时UPSERT/MERGE INTO/REPLACE INTO/ON DUPLICATE KEY UPDATE或诸如此类的事情。还有一件事:在我的例子中,如果实体已经存在,则删除CASCADE不是一个选项,因为这基本上总是会删除整个数据库。(要继续使用艺术家示例,请考虑由多个艺术家编辑专辑和曲目)。这意味着需要有一些逻辑来检查实体是否已经存在,它会更新(不更改id)并仅删除那些在最新版本中不再存在的子实体,同时更新现有实体并插入新实体。“我试图澄清”和“还有一件事”是您问题的一部分。请编辑此问题以包含所有事实。编辑问题后,请删除注释。我试图澄清:我寻找一个现有的解决方案,最好是Postgres和PHP,它允许将这些数据导出到可用于插入或更新的文件中。与mySQL不同的是,Postgres不知道在重复密钥更新时UPSERT/MERGE INTO/REPLACE INTO/ON DUPLICATE KEY UPDATE或诸如此类的事情。还有一件事:在我的例子中,如果实体已经存在,则删除CASCADE不是一个选项,因为这基本上总是会删除整个数据库。(要继续使用艺术家示例,请考虑由多个艺术家编辑专辑和曲目)。这意味着需要一些逻辑来检查实体是否已经存在,即