rafaeltheraven/db-changeset-manager-psql

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

v0.3.6 2022-02-16 10:39 UTC

This package is not auto-updated.

Last update: 2024-09-26 22:28:53 UTC


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 类以将结果发送到所需的位置和方式(日志文件、浏览器、数据库等)。