rafaeltheraven / db-changeset-manager-psql
自动将 SQL 文件(更改集)应用于不同环境或用户的数据库。
Requires
- php: >=5.4.0
- ext-pdo: *
README
这是一个从上游 zimzat 版本非常基础的分支,使得该应用程序能够在 postgres 数据库上运行。我创建它是因为我喜欢他们的迁移器的这种简洁性,但我自己使用 postgres,他们在一些地方使用了某些特定的 mysql 语法。
为了使自动递增工作,我使用了一些 postgres 特定的语法,所以它可能在其他任何地方都无法工作
Db Changeset Manager
自动将 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
- Postgresql
安装
安装此实用程序支持的方法是通过 Composer。
composer install zimzat/db-changeset-manager
命令行使用
安装后,可以使用 PHP 壳文件从命令行应用更改。
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\Apply(),
new \DbVcs\Output()
);
$version = null;
$changeManager->updateTo($version);
注意:应该扩展 \DbVcs\Output 类以将结果发送到所需的位置和方式(日志文件、浏览器、数据库等)。