在复合数据库中管理数据库别名

本地和远程数据库别名都可以在复合数据库中创建。

列出复合数据库中的数据库别名

可以使用 SHOW ALIASES FOR DATABASE 查看复合数据库中可用的数据库别名。特定数据库别名所在的复合数据库的名称显示在返回的 composite 列中。

所需的权限在 DBMS 别名管理权限 中进行了描述。

查询
SHOW ALIASES FOR DATABASE
结果
+--------------------------------------------------------------------------------------------------+
| name              | composite | database        | location | url                       | user    |
+--------------------------------------------------------------------------------------------------+
| "library.romance" | "library" | "romance-books" | "remote" | "neo4j+s://location:7687" | "alice" |
| "library.sci-fi"  | "library" | "sci-fi-books"  | "local"  | NULL                      | NULL    |
+--------------------------------------------------------------------------------------------------+

有关此命令所有返回列的描述,以及如何过滤 SHOW ALIASES FOR DATABASE 命令以查找别名的信息,请参阅 列出标准数据库的别名

在复合数据库中创建数据库别名

本地和远程数据库别名都可以是 复合数据库 的一部分。

数据库别名由两部分组成,用点分隔:命名空间和别名名称。

命名空间必须是复合数据库的名称。

查询
CREATE ALIAS garden.flowers
FOR DATABASE `perennial-flowers`
查询
CREATE ALIAS garden.trees
FOR DATABASE trees AT 'neo4j+s://location:7687'
USER alice PASSWORD 'password'

当在复合数据库中创建数据库别名后,它将显示在 SHOW DATABASES 命令提供的 constituents 列中,以及 SHOW ALIASES FOR DATABASE 命令中。

查询
SHOW DATABASE garden YIELD name, type, constituents
结果
+-------------------------------------------------------------+
| name     | type        | constituents                       |
+-------------------------------------------------------------+
| "garden" | "composite" | ["garden.flowers", "garden.trees"] |
+-------------------------------------------------------------+
查询
SHOW ALIASES FOR DATABASE
WHERE composite = 'garden'
结果
+-----------------------------------------------------------------------------------------------------+
| name             | composite | database            | location | url                       | user    |
+-----------------------------------------------------------------------------------------------------+
| "garden.flowers" | "garden"  | "perennial-flowers" | "local"  | NULL                      | NULL    |
| "garden.trees"   | "garden"  | "trees"             | "remote" | "neo4j+s://location:7687" | "alice" |
+-----------------------------------------------------------------------------------------------------+

数据库别名不能作为复合数据库的目标。

查询
CREATE ALIAS yard FOR DATABASE garden
错误消息
Failed to create the specified database alias 'yard': Database 'garden' is composite.

更改复合数据库中的本地和远程数据库别名

属于复合数据库的本地和远程数据库别名可以使用 ALTER ALIAS 命令进行更改。这与用于更改不属于复合数据库的别名的命令相同。

查询
ALTER ALIAS garden.flowers SET DATABASE PROPERTIES { perennial: true }
查询
ALTER ALIAS garden.trees SET DATABASE TARGET updatedTrees AT 'neo4j+s://location:7687' PROPERTIES { treeVersion: 2 }

然后,更新后的属性可以在查询中与 graph.propertiesByName() 函数 一起使用。

所有数据库别名的更改都将显示在SHOW ALIASES FOR DATABASE命令中。

查询
SHOW ALIASES FOR DATABASE YIELD *
结果
+-----------------------------------------------------------------------------------------------------------------------------------+
| name              | composite | database            | location | url                       | user    | driver | properties        |
+-----------------------------------------------------------------------------------------------------------------------------------+
| "garden.flowers"  | "garden"  | "perennial-flowers" | "local"  | NULL                      | NULL    | NULL   | {perennial: TRUE} |
| "garden.trees"    | "garden"  | "updatedtrees"      | "remote" | "neo4j+s://location:7687" | "alice" | {}     | {treeversion: 2}  |
| "library.romance" | "library" | "romance-books"     | "remote" | "neo4j+s://location:7687" | "alice" | {}     | {}                |
| "library.sci-fi"  | "library" | "sci-fi-books"      | "local"  | NULL                      | NULL    | NULL   | {}                |
+-----------------------------------------------------------------------------------------------------------------------------------+

删除复合数据库中的数据库别名

要删除复合数据库中的别名,请使用DROP ALIAS FOR DATABASE命令。这与用于删除不属于复合数据库的别名的命令相同。

查询
DROP ALIAS garden.flowers FOR DATABASE

删除数据库别名后,它将不再显示在SHOW ALIASES FOR DATABASE命令中。

查询
SHOW ALIASES FOR DATABASE
结果
+--------------------------------------------------------------------------------------------------+
| name              | composite | database        | location | url                       | user    |
+--------------------------------------------------------------------------------------------------+
| "garden.trees"    | "garden"  | "updatedtrees"  | "remote" | "neo4j+s://location:7687" | "alice" |
| "library.romance" | "library" | "romance-books" | "remote" | "neo4j+s://location:7687" | "alice" |
| "library.sci-fi"  | "library" | "sci-fi-books"  | "local"  | NULL                      | NULL    |
+--------------------------------------------------------------------------------------------------+

此外,已删除的别名将不再出现在SHOW DATABASE命令的constituents列中。

查询
SHOW DATABASE garden YIELD name, type, constituents
结果
+-------------------------------------------+
| name     | type        | constituents     |
+-------------------------------------------+
| "garden" | "composite" | ["garden.trees"] |
+-------------------------------------------+

数据库别名和转义

复合数据库中数据库别名的命名规则与标准数据库别名的命名相同。但是,在使用反引号转义名称时,需要考虑一些其他事项。

转义数据库别名和复合数据库名称

复合数据库名称和数据库别名需要分别进行转义。无论名称是否包含特殊字符,都可以添加反引号,因此最好始终使用反引号括住两个名称,例如`composite`.`alias`

以下示例创建了一个名为my alias with spaces的数据库别名,作为名为my-composite-database-with-dashes的复合数据库中的组成部分。

查询
CREATE ALIAS `my-composite-database-with-dashes`.`my alias with spaces` FOR DATABASE `northwind-graph`

如果不分别转义,则会创建一个完整名称为my alias with.dots and spaces的数据库别名。

查询
CREATE ALIAS `my alias with.dots and spaces` FOR DATABASE `northwind-graph`

处理多个点

数据库别名名称也可以包含点。尽管这些始终需要进行转义,以避免与复合数据库和数据库别名分隔符产生歧义。

查询
CREATE ALIAS `my.alias.with.dots` FOR DATABASE `northwind-graph`
查询
CREATE ALIAS `my.composite.database.with.dots`.`my.other.alias.with.dots` FOR DATABASE `northwind-graph`

单个点和本地数据库别名

对于没有现有复合数据库的本地数据库别名,存在一个特殊情况,该别名包含一个单独的点。如果存在复合数据库some,则以下查询将在复合数据库some中创建一个名为alias的数据库别名。但是,如果不存在这样的数据库,则相同的查询将创建一个名为some.alias的数据库别名。

查询
CREATE ALIAS some.alias FOR DATABASE `northwind-graph`

处理参数

使用参数时,名称不能转义。当给定参数包含点时,第一个点将被视为复合数据库的分隔符。

考虑带有参数的查询

参数
{
  "aliasname": "mySimpleCompositeDatabase.myAlias"
}
查询
CREATE ALIAS $aliasname FOR DATABASE `northwind-graph`

如果复合数据库mysimplecompositedatabase存在,则将在该复合数据库中创建一个名为myalias的数据库别名。如果不存在这样的复合数据库,则将创建一个名为mysimplecompositedatabase.myalias的数据库别名。

相反,不能使用参数在复合数据库mycompositedatabase.withdot中创建名为myalias的数据库别名。考虑相同的查询,但使用以下参数

参数
{
  "aliasname": "myCompositeDatabase.withDot.myAlias"
}

由于第一个点将用作分隔符,因此该命令将尝试在复合数据库mycompositedatabase中创建名为withdot.myalias的数据库别名。如果mycompositedatabase不存在,则该命令将创建一个名为mycompositedatabase.withdot.myalias的数据库别名,该别名不属于任何复合数据库。

在这些情况下,建议避免使用参数并分别显式转义复合数据库名称和别名名称,以避免歧义。

处理参数

数据库别名和同名复合数据库需要进一步的特殊参数处理。

考虑以下设置

查询
CREATE COMPOSITE DATABASE foo
CREATE ALIAS `foo.bar` FOR DATABASE `northwind-graph`

别名foo.bar不属于复合数据库foo

使用参数删除此别名会导致缺少别名的错误。

参数
{
  "aliasname": "foo.bar"
}
查询
DROP ALIAS $aliasname FOR DATABASE
错误消息
Failed to delete the specified database alias 'foo.bar': Database alias does not exist.

如果复合数据库foo不存在,则会删除数据库别名foo.bar

在这些情况下,建议避免使用参数并分别显式转义复合数据库名称和别名名称,以避免歧义。