zimzat/db-changeset-manager

自动化将SQL文件(更改集)应用到不同环境或用户的数据库中的过程。

v0.3.4 2015-10-08 01:45 UTC

This package is not auto-updated.

Last update: 2024-09-28 17:12:39 UTC


README

自动化将SQL文件(更改集)应用到不同环境或用户的数据库中的过程。

创建版本化目录,让开发者可以将SQL文件放入其中,通过发布过程应用到其他环境,并将它们返回给其他开发者,以确保每个人都能与数据库更改保持同步。此项目不试图强制特定的语法、冗长的声明或提供自动冲突解决或检测;只是简单地应用环境之间的更改过程。

典型的更改集目录看起来可能像这样

changesets
├── v1.0
│   ├── 20150102_create-user.sql
│   └── 20150103_track-user-actions.sql
├── v1.1
│   └── 20150103_track-user-action-date.sql
├── v1.3
│   ├── 2015-01-15_create-user-profile.sql
│   ├── 2015-01-16_blogs.sql
│   └── 2015-01-17_user-roles.sql
├── v1.3.1
│   └── 2015-01-20_add-user-roles.sql
└── v1.5
    ├── 2015-01-15_long-awaited-feature.sql
    ├── 2015-02-01_index-blogs.sql
    ├── 2015-02-03_add-reporting.sql
    └── 2015-02-10_blog-tags.sql

更改按照版本号顺序应用到数据库中,然后按文件名进行数字排序,因此从1.0升级到1.3时,会先应用'track-user-actions',即使它们的日期前缀相同。

默认情况下,目录应该以前缀'v'开头,但可以通过在db.ini中指定versionPrefix来更改或删除。版本方案应遵循version_compare()规定的标准。

文件必须以.sql结尾,并且在所有版本之间必须具有唯一名称,但其他名称可以随意命名。在应用到数据库之前,会对文件列表进行自然排序(2在10之前)。

限制

  • 不允许SELECT语句。
  • 不允许CREATE DATABASE、DROP DATABASE或USE DATABASE语句。

要求

  • PDO
  • MySQL

安装

安装此工具支持的方法是通过Composer。

composer install zimzat/db-changeset-manager

命令行使用

安装后,可以使用php shell文件从命令行应用更改。

ln -s ./vendor/bin/dbChangeManager.php .
./dbChangeManager.php

命令行工具期望定义一个配置文件,指定访问名称和权限。

host = localhost
dbname = test
username = root
; password = secret
changesetPath = changesets
; versionPrefix = v

可用的命令,也可以在运行不带任何选项的命令时看到,包括

./bin/dbChangeManager.php -h
./bin/dbChangeManager.php -s [-c db.ini]
./bin/dbChangeManager.php -t <version> [-a | -n | -i | -o <file>] [-c db.ini]

Specify an action:
  -h           Display this help message.
  -s           Display the current version of the database
  -t version   Specify new version to target upgrade to

Set a run mode:
  -a           Apply: Execute all changesets and tracking against the database immediately
  -n           No Op: Run as normal but perform no modifying operations against the database.
  -i           Interactive: Provide interactive confirmation prompts before applying changes.
  -o file      File: Output all SQL commands to a file which can be run separately.

Other options:
  -c file      Specify the db config file to use, defaults to db.ini

PHP使用

还可以直接从PHP脚本中调用该工具,通过实例化\DbVcs\ChangeManager对象及其依赖项。

$changeManager = new \DbVcs\ChangeManager(
	'changesets',
	new \PDO(
		'mysql:host=localhost;dbname=test',
		'root',
		null, [
			\PDO::ATTR_EMULATE_PREPARES => false,
			\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
		]
	),
	new \DbVcs\Processor\NoOp(),
	new \DbVcs\Output()
);

注意:应该扩展\DbVcs\Output类,以将结果发送到所需的位置和方式(日志文件、浏览器、数据库等)。