zeptech/dbup

数据库更新助手

dev-master 2014-07-11 15:36 UTC

This package is not auto-updated.

Last update: 2024-09-14 12:19:05 UTC


README

用PHP编写的数据库版本管理器

阶段

更新算法支持每个模式修订的3个阶段:预变更、变更和后变更。预变更和后变更脚本都是PHP脚本。变更阶段是SQL脚本。每个阶段都可以返回数据,这些数据将被传递到后续阶段,包括从PHP到SQL和反之亦然(关于这一点稍后详细介绍)。

正在进行中 PHP脚本执行方法

DbUp支持多种不同的结构化/封装PHP预/后变更脚本的方式。默认情况下,只需提供包含变更逻辑的PHP文件。这些文件可以按照最适合所执行逻辑的方式结构化。预变更脚本的返回值将被传递到后续的变更SQL脚本中。

文件系统结构

数据库模式修订应存储在同一目录中。每个修订将包括一组1到3个文件,一个用于阶段,其中所有阶段都是可选的。文件需要根据以下约定命名

  • 预变更:pre-alter-000001.php
  • 变更:alter-000001.sql
  • 后变更:post-alter-000001.php

SQL增强

变更阶段的.sql脚本支持SQL语法的超集。额外的语法使得编写可移植脚本更容易,同时也可以执行一些通常需要预/后变更脚本的一些常见任务。

INSERT ID变量

当向包含序列(自动递增)字段的表执行INSERT操作时,很难确定生成的ID以供后续使用。DbUp支持特殊语法来存储这些ID在变量中,并在后续的INSERT语句中使用它们。要存储插入ID,请使用以下语法

my_insert_id := INSERT INTO my_table (key, value)
    VALUES ('aKey', 'aValue');

然后要使用保存的插入ID在后续语句中,请使用以下语法引用变量

INSERT INTO my_table_ref (my_table_id, refd)
    VALUES (:my_insert_id, 'refVal');

为了与PostgreSQL一起使用此功能,表中的id字段需要由名为<table-name>_id_seq的序列支持。

正在进行中 SERIAL字段的规范化

大多数数据库都支持一种字段类型,它是一个自动递增的整数,通常用于主键,但它们的语法略有不同。在编写变更脚本时,你可以为任何你感到舒适的数据库编写这些语句,dbUp将正确处理你的脚本在运行时所在的数据库。

此功能目前是WIP,并且仅支持有限数量的用例(即我个人的用例)。如果您发现某个用例不起作用,请创建一个问题,应该很容易添加支持。

当前支持包括

  • MySQL integer [NOT NULL] AUTO_INCREMENT字段可以针对PostgreSQL连接执行。字段可以指定为非空。
  • 就是这样。

正在进行中 ALTER TABLE的规范化

对各种ALTER TABLE命令的某些支持

  • MySQL ALTER TABLE <table> MODIFY [COLUMN] <column> <new-type>和PgSQL ALTER TABLE <table> ALTER COLUMN <column> [SET DATA] TYPE <new-type>语句被规范化。