在OrientDB中,如何编写数据库模式create/updateSQL的脚本?
In OrientDB, how to write a database schema create/update SQL script?
我正在研究如何在 OrientDB 中管理模式(使用源代码管理)。我有一个有效的 SQL 脚本,可以通过 OrientDB 的 "bin/console.sh" 运行 创建 类 和函数。我的脚本仅适用于创建新数据库,因为 CREATE...
语句将在第二次时失败。我希望能够在进行更改时重新 运行 脚本。那么,我们如何有条件地执行 CREATE CLASS
或 CREATE PROPERTY
之类的操作?
到目前为止,我尝试使用 IF
来跳过这样的语句,但是 IF
只允许在 script sql...end
块内,如果您尝试将任何 CREATE...
语句,你会得到错误:"Cannot change the schema while a transaction is active." 我们唯一能想到的就是使用 set ignoreErrors true
,但这远非理想,因为错误仍然存在抛出,因此很难区分预期错误和实际问题。
如果我问错了问题(意思是,除了 SQL 脚本之外,还有更好的方法来管理架构的源代码控制),请告诉我。
在 OrientDB v2.2.13 中,有一个新的 "IF EXISTS" 子句可以让您使用相同的脚本优雅地创建或更新数据库。它是 CREATE 和 DROP 语句的一部分:
CREATE CLASS <class> [IF NOT EXISTS] ...;
CREATE PROPERTY <class>.<property> [IF NOT EXISTS] ...;
DROP CLASS <class> [IF EXISTS];
DROP PROPERTY <class>.<property> [IF EXISTS];
此功能可以在 official documentation 中找到。
我正在研究如何在 OrientDB 中管理模式(使用源代码管理)。我有一个有效的 SQL 脚本,可以通过 OrientDB 的 "bin/console.sh" 运行 创建 类 和函数。我的脚本仅适用于创建新数据库,因为 CREATE...
语句将在第二次时失败。我希望能够在进行更改时重新 运行 脚本。那么,我们如何有条件地执行 CREATE CLASS
或 CREATE PROPERTY
之类的操作?
到目前为止,我尝试使用 IF
来跳过这样的语句,但是 IF
只允许在 script sql...end
块内,如果您尝试将任何 CREATE...
语句,你会得到错误:"Cannot change the schema while a transaction is active." 我们唯一能想到的就是使用 set ignoreErrors true
,但这远非理想,因为错误仍然存在抛出,因此很难区分预期错误和实际问题。
如果我问错了问题(意思是,除了 SQL 脚本之外,还有更好的方法来管理架构的源代码控制),请告诉我。
在 OrientDB v2.2.13 中,有一个新的 "IF EXISTS" 子句可以让您使用相同的脚本优雅地创建或更新数据库。它是 CREATE 和 DROP 语句的一部分:
CREATE CLASS <class> [IF NOT EXISTS] ...;
CREATE PROPERTY <class>.<property> [IF NOT EXISTS] ...;
DROP CLASS <class> [IF EXISTS];
DROP PROPERTY <class>.<property> [IF EXISTS];
此功能可以在 official documentation 中找到。