nkiraly / dbsteward
SQL数据库定义差异工具。结构和数据以DTD强制、人类可读的XML格式定义。输出事务SQL语句文件以应用您的更改。
Requires
- php: >=5.5.0
- ext-dom: *
- ext-pcre: *
- ext-pgsql: *
- ext-simplexml: *
- ext-spl: *
- kevinlebrun/colors.php: ^0.4.1
- monolog/monolog: 1.16.0
Requires (Dev)
- ext-mysqli: *
- ext-pgsql: *
- phpunit/phpunit: 4.4.*
- satooshi/php-coveralls: dev-master
Suggests
- ext-pdo: Necessary to extract a schema from a MySQL database
This package is auto-updated.
Last update: 2024-09-19 21:24:12 UTC
README
SQL数据库定义差异工具。结构和数据以DTD强制、人类可读的XML格式定义。输出事务SQL语句文件以应用您的更改。
注意:由于依赖关系更新,DBSteward 1.4.0 是最后一个支持PHP 5.3 和 5.4 的版本。请在升级到 DBSteward 1.4.2+ 之前,将您的运行时升级到至少 PHP 5.5。
想要更新吗?
订阅 DBSteward Announce 邮件列表
需要帮助?
将您的问题发布到 DBSteward Users 邮件列表
DBSteward是给谁的?
目标用户是应用程序开发人员和维护应用程序生命周期中数据库结构更改的数据库管理员。在DBSteward XML定义中定义您的SQL数据库可以大大降低您的发布工程成本,因为无需编写和测试SQL更改。
许多开发人员维护应用程序数据库的完整和升级脚本版本。通过只需要求开发人员维护一个完整的定义文件,可以减少升级头痛或数据丢失。从版本A到B的升级变为编译任务,您只需要将A和B版本的数据库在XML中提供给DBSteward,让其生成SQL更改。
你是技术型的,已经厌倦了阅读这个常见问题解答了吗?
使用DBSteward生成或差异数据库定义:https://github.com/dbsteward/dbsteward/blob/master/docs/USING.md
使用Composer / PEAR安装DBSteward:https://github.com/dbsteward/dbsteward/blob/master/docs/INSTALLING.md
XML格式示例和趣闻轶事:https://github.com/dbsteward/dbsteward/blob/master/docs/XMLGUIDE.md
软件开发最佳实践:https://github.com/dbsteward/dbsteward/blob/master/docs/DEVGUIDE.md
Slony配置管理示例:https://github.com/dbsteward/dbsteward/blob/master/docs/SLONYGUIDE.md
常见问题解答
使用DBSteward生成或差异数据库时可能存在细微差别。请查阅以下常见问题解答,以帮助您在采用DBSteward进行开发时提高效率。
1. 这些输入和输出文件是什么?
在以下示例中,定义文件是 someapp_v1.xml。有关DBSteward XML格式的更多信息,请参阅 https://github.com/dbsteward/dbsteward/blob/master/docs/XMLGUIDE.md
在构建完整定义( dbsteward --xml=someapp.xml )时,DBSteward将输出 someapp_v1_full_build.sql 文件。此SQL文件包含所有DDL DML DCL以创建数据库定义实例,所有操作均按外键依赖顺序进行。
- someapp_v1.xml
- someapp_v2.xml
- somapp_v2_upgrade_stageN_*.sql
在生成两个定义之间的定义差异( dbsteward --oldxml=someapp_v1.xml --newxml=someapp_v2.xml )时,DBSteward将输出多个升级文件,分段升级过程,所有操作均按外键依赖顺序进行。
- 阶段 1
- someapp_v2_upgrade_stage1_schema1.sql
- DDL( CREATE,ALTER TABLE )更改和数据库结构的添加,按外键依赖顺序
- DCL( GRANT )应用所有定义的权限
- 阶段 2
- someapp_v2_upgrade_stage2_data1.sql
- 删除和修改静态定义表数据(DML:DELETE、UPDATE)
- DDL 清理初始 ALTER 时不生效的约束
- 阶段 3
- someapp_v2_upgrade_stage3_schema1.sql
- DDL 最终更改和删除任何不再定义的数据库结构
- 阶段 4
- someapp_v2_upgrade_stage4_data1.sql
- DML(INSERT、UPDATE)插入和更新静态定义表数据
2. DBSteward 如何确定更改内容?
DBSteward 的方法和预期是,开发者只需维护数据库的完整定义。运行时,DBSteward 将确定两个不同版本数据库定义 XML 之间的更改,并生成相应的 SQL 命令作为输出。
DBSteward XML 定义文件可以包含并与其他 DBSteward XML 定义文件叠加组合,提供了一种方法来叠加特定安装的数据库结构和静态数据定义。
DBSteward 有两个主要输出产品:XML 定义解析和比较
- 完整 - 输出一个“完整”的数据库定义 SQL 文件,可用于根据 XML 定义创建完整的数据库。
- 升级 - 输出分阶段的 SQL 升级文件,可用于将使用第一个 XML 定义文件创建的现有数据库升级到第二个 XML 文件定义的状态。
DBSteward 在比较两个 XML 定义集的结果中创建升级脚本。因此,创建升级文件不需要目标数据库连接。
DBSteward 还能够读取标准 PostgreSQL pg_dump 文件或抓取运行的 PostgreSQL 数据库,并输出相应的 XML 定义文件。
3. 为什么使用 DBSteward 维护数据库结构?
使用 DBSteward 维护数据库结构允许开发者进行大或小的更改,并立即对更新的代码进行新的数据库部署测试。更新的定义还可以立即用于将旧版本升级到当前版本。能够生成 DDL / DCL / DML 更改可以极大地简化并加快数据库升级测试和部署。在开发周期的任何时刻,数据库管理员都可以生成数据库定义更改,而不是维护复杂的升级脚本或寻找进行数据库更改的开发者。
4. DBSteward 目前支持哪些 SQL RDMS 输出格式?
DBSteward 目前支持 Postgresql 8/9、MySQL 5.5 和 Microsoft SQL Server 2005/2008 兼容的 SQL 命令输出文件。DBSteward 具有可扩展的 SQL 格式化代码架构,以快速支持其他 SQL 风味。
5. 如何开始?
要开始尝试各种可能性,请使用 Composer 安装 DBSteward,请参阅 https://github.com/dbsteward/dbsteward/blob/master/docs/INSTALLING.md
您还需要在您的 PATH 中安装可执行的 xmllint
,可从 libxml2 获取。
您也可以通过 git://github.com/dbsteward/dbsteward.git 进行 checkout。它可以以源检查形式运行,作为 php bin/dbsteward.php
6. 如何将现有数据库转换为 DBSteward 定义?
7. 我有一个现有项目,我如何迁移到使用 DBSteward?
结构和数据提取的示例可以在使用 DBSteward 文章中找到 https://github.com/dbsteward/dbsteward/blob/master/docs/USING.md
8. 我能否在 DBSteward XML 中定义静态数据?
是的,您可以这样做。静态数据行将在第2步和第4步的 .sql 文件中生成差异,并产生DML变更。您可以在 someapp_v1.xml 示例定义 中的 user_status_list 表中找到定义静态数据的示例。确保在每次版本中保留您的静态数据行。每次构建升级时,它们都会进行比较,以检测更改、新增和删除。
9. 如何定义像order这样的列名或像group这样的表名,而不会出现'无效标识符'错误?
使用 --quotecolumnnames 或 --quoteallnames 告诉 dbsteward 在该类型的所有对象上使用标识符分隔符,以允许使用保留词作为对象。
10. 为什么视图总是被删除然后重新添加?
SQL服务器实现扩展 SELECT * .. 并在从查询表达式创建视图定义时隐式使用列类型。重新构建这些视图确保视图中的类型和列列表将与提供数据的依赖表保持一致。
我的 slonik 文件在哪里?为什么我的 slony 配置细节没有得到尊重?
除非您使用 --generateslonik 标志,否则 slony slonik 配置文件不会在结构定义或差异比较期间输出。这是为了使开发与DBA复制人员在开发周期中的角色更清晰。
12. 我只是选择一个 slonyId 吗?slonyId 的意义或原因是什么?
slonyIds 可以完全任意,但建议按段分配。例如:ID 100-199 保留用于用户表,ID 200-299 用于论坛关系和帖子数据,ID 500-599 用于表单全文搜索表,等等。
13. 我如何定义使用 DBSteward 定义的数据库并希望使用 Slony 进行复制的复制和升级?
有关示例,请参阅 Slony slonik 输出使用指南 https://github.com/dbsteward/dbsteward/blob/master/docs/SLONYGUIDE.md。
14. 软件开发生命周期中一些推荐的最佳实践是什么?
有关详细示例,请参阅 DBSteward 开发指南 https://github.com/dbsteward/dbsteward/blob/master/docs/DEVGUIDE.md。