在复合数据库中管理数据库别名
本地和远程数据库别名都可以在复合数据库中创建。
列出复合数据库中的数据库别名
可以使用 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
。
在这些情况下,建议避免使用参数并分别显式转义复合数据库名称和别名名称,以避免歧义。