管理标准数据库的数据库别名

数据库别名有两种:本地和远程。本地数据库别名只能指向同一 DBMS 中的数据库。远程数据库别名可以指向另一个 Neo4j DBMS 中的数据库。当对数据库别名运行查询时,它将被重定向到目标数据库。用户的“主数据库”可以设置为别名,在使用时它将解析为目标数据库。

此页面介绍了如何管理标准数据库的数据库别名。本地和远程数据库别名也可以作为 复合数据库的一部分创建。有关更多信息,请参见 在复合数据库中管理数据库别名

本地数据库别名可以在所有其他 Cypher 命令中代替目标数据库使用。请注意,本地数据库别名将在执行命令时解析。权限是在数据库上定义的,而不是在本地数据库别名上定义的。

远程数据库别名可用于连接到远程 Neo4j DBMS 的数据库、USE 子句、设置用户的“主数据库”以及定义对远程数据库的访问权限。远程数据库别名需要配置才能安全地连接到远程目标,这在 连接远程数据库中进行了描述。无法通过远程数据库别名模拟远程数据库上的用户或执行对远程数据库的管理命令。

可以使用针对system数据库执行的一组 Cypher 管理命令来创建和管理数据库别名。所需权限在 DBMS ALIAS MANAGEMENT 权限中进行了描述。当通过 Bolt 连接到 DBMS 时,管理命令会自动路由到system数据库。

如果事务修改了数据库别名,则同时针对该别名执行的其他事务可能会中止并回滚以确保安全。这可以防止出现对同一别名的多个目标数据库执行事务等问题。

列出数据库别名

可以使用 SHOW ALIASES FOR DATABASE 查看可用的数据库别名。所需权限在 DBMS 别名管理权限 中描述。

SHOW ALIASES FOR DATABASE 将生成一个包含以下列的数据库别名表

描述 类型

name

数据库别名的完全限定名。 默认输出

STRING

composite

此别名所属的复合数据库的名称,如果别名不属于复合数据库,则为 null默认输出

STRING

database

目标数据库的名称。 默认输出

此列根据用户的 ACCESS 权限进行过滤。但是,某些权限允许用户查看其他数据库,而无论其 ACCESS 权限如何。

  • 具有 CREATE DATABASEDROP DATABASEALTER DATABASESET DATABASE ACCESS 权限的用户可以看到所有标准数据库。

  • 具有 CREATE COMPOSITE DATABASEDROP COMPOSITE DATABASECOMPOSITE DATABASE MANAGEMENT 权限的用户可以看到所有复合数据库。

  • 具有 DATABASE MANAGEMENT 权限的用户可以看到所有数据库。

  • 用户始终可以看到 system 数据库。

如果用户没有被授予目标数据库的 ACCESS 权限,并且上述特殊情况都不适用,那么用户将无法看到它,并且此列将为 null

STRING

location

数据库的位置,可以是 localremote默认输出

STRING

url

目标位置,如果目标是本地的,则为 null默认输出

STRING

user

连接到远程数据库的用户,如果目标数据库是本地的,则为 null默认输出

STRING

driver

连接到远程数据库的驱动程序选项,如果目标数据库是本地的,则为 null。远程数据库别名允许的 驱动程序设置 列表。

MAP

properties

在数据库别名上设置的任何属性。

MAP

可以使用命令 SHOW ALIASES FOR DATABASE YIELD * 显示特定数据库别名的详细信息。当提供 YIELD * 子句时,将返回完整的列集。

显示数据库的所有别名

可以使用命令 SHOW ALIASES FOR DATABASE 显示所有可用数据库别名的摘要。此命令将显示标准数据库和复合数据库的数据库别名。

查询
SHOW ALIASES FOR DATABASE
结果
+--------------------------------------------------------------------------------------------+
| name              | composite | database  | location | url                       | user    |
+--------------------------------------------------------------------------------------------+
| "films"           | NULL      | "movies"  | "local"  | NULL                      | NULL    |
| "motion pictures" | NULL      | "movies"  | "local"  | NULL                      | NULL    |
| "movie scripts"   | NULL      | "scripts" | "remote" | "neo4j+s://location:7687" | "alice" |
+--------------------------------------------------------------------------------------------+

显示数据库的特定别名

要仅列出单个数据库别名,SHOW ALIASES 命令需要一个别名;

查询
SHOW ALIAS films FOR DATABASES
结果
+---------------------------------------------------------+
| name    | composite | database | location | url  | user |
+---------------------------------------------------------+
| "films" | NULL      | "movies" | "local"  | NULL | NULL |
+---------------------------------------------------------+

显示数据库的详细别名信息

查询
SHOW ALIASES FOR DATABASE YIELD *
结果
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| name              | composite | database  | location | url                       | user    | driver                                                                                                                                                                                                         | properties                |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| "films"           | NULL      | "movies"  | "local"  | NULL                      | NULL    | NULL                                                                                                                                                                                                           | {}                        |
| "motion pictures" | NULL      | "movies"  | "local"  | NULL                      | NULL    | NULL                                                                                                                                                                                                           | {namecontainsspace: TRUE} |
| "movie scripts"   | NULL      | "scripts" | "remote" | "neo4j+s://location:7687" | "alice" | {connection_pool_idle_test: PT2M, connection_pool_max_size: 10, logging_level: "INFO", ssl_enforced: TRUE, connection_pool_acquisition_timeout: PT1M, connection_timeout: PT5S, connection_max_lifetime: PT1H} | {}                        |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

显示数据库的别名 count

可以使用 count() 聚合以及 YIELDRETURN 查看数据库别名的数量。

查询
SHOW ALIASES FOR DATABASE YIELD *
RETURN count(*) as count
结果
+-------+
| count |
+-------+
| 3     |
+-------+

显示数据库的已过滤别名信息

可以使用 YIELDORDER BYWHERE 来过滤和排序结果。

查询
SHOW ALIASES FOR DATABASE YIELD name, url, database
ORDER BY database
WHERE name CONTAINS 'e'

在本例中

  • 使用 YIELD 子句减少了返回的列数。

  • 返回列的顺序已更改。

  • 结果使用 ORDER BYdatabase 列排序。

  • 结果已过滤,仅显示包含 'e' 的数据库别名。

还可以使用 SKIPLIMIT 对结果进行分页。

结果
+-----------------------------------------------------------+
| name              | url                       | database  |
+-----------------------------------------------------------+
| "motion pictures" | NULL                      | "movies"  |
| "movie scripts"   | "neo4j+s://location:7687" | "scripts" |
+-----------------------------------------------------------+

创建数据库别名

可以使用 CREATE ALIAS 创建数据库别名。该命令支持创建本地和远程数据库别名。有关作为复合数据库一部分的本地和远程数据库别名的更多信息,请参阅 在复合数据库中创建数据库别名

所需权限在 DBMS 别名管理权限 中描述。

数据库别名必须符合 别名名称 部分中指定的规则。

为本地数据库创建数据库别名

本地数据库别名将目标指向同一 DBMS 中的数据库。

查询
CREATE ALIAS `northwind` FOR DATABASE `northwind-graph-2021`

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

查询
SHOW DATABASE `northwind`
结果
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| name                   | type       | aliases       | access       | address          | role      | writer | requestedStatus | currentStatus | statusMessage | default | home  | constituents |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| "northwind-graph-2021" | "standard" | ["northwind"] | "read-write" | "localhost:7687" | "primary" | TRUE   | "online"        | "online"      | ""            | FALSE   | FALSE | []           |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
查询
SHOW ALIAS `northwind` FOR DATABASE
结果
+---------------------------------------------------------------------------+
| name        | composite | database               | location | url  | user |
+---------------------------------------------------------------------------+
| "northwind" | NULL      | "northwind-graph-2021" | "local"  | NULL | NULL |
+---------------------------------------------------------------------------+

在创建数据库别名时使用 IF EXISTSOR REPLACE

CREATE ALIAS 命令可以选择性地是幂等的,其默认行为是在数据库别名已存在的情况下失败并报错。有两种方法可以规避此行为。

首先,将 IF NOT EXISTS 附加到命令确保在数据库别名已存在的情况下不返回任何错误,也不会发生任何操作。

查询
CREATE ALIAS `northwind` IF NOT EXISTS  FOR DATABASE `northwind-graph-2021`

其次,将 OR REPLACE 添加到命令会导致任何现有的数据库被删除并创建一个新的数据库。

查询
CREATE OR REPLACE ALIAS `northwind` FOR DATABASE `northwind-graph-2021`

这等效于运行 DROP ALIAS `northwind` IF EXISTS FOR DATABASE 后跟 CREATE ALIAS `northwind` FOR DATABASE northwind-graph-2021++`。

这些命令的 IF NOT EXISTSOR REPLACE 部分不能一起使用。

为本地数据库别名设置属性

本地数据库别名也可以被赋予属性。然后,这些属性可以在查询中与 graph.propertiesByName() 函数 一起使用。

查询
CREATE ALIAS `northwind-2022`
FOR DATABASE `northwind-graph-2022`
PROPERTIES { newestNorthwind: true, index: 3 }

然后,这些属性将显示在 SHOW ALIASES FOR DATABASE YIELD …​ 命令中。

查询
SHOW ALIAS `northwind-2022` FOR DATABASE YIELD name, properties
结果
+------------------------------------------------------+
| name             | properties                        |
+------------------------------------------------------+
| "northwind-2022" | {index: 3, newestnorthwind: TRUE} |
+------------------------------------------------------+

为远程数据库创建数据库别名

数据库别名可以通过提供 URL 和远程 Neo4j DBMS 上用户的凭据来将目标指向远程数据库。有关必要配置,请参阅 配置远程数据库别名

与本地数据库别名一样,创建远程数据库别名也允许 IF NOT EXISTSOR REPLACE 子句。两者都检查任何远程或本地数据库别名。

查询
CREATE ALIAS `remote-northwind` FOR DATABASE `northwind-graph-2020`
AT "neo4j+s://location:7687"
USER alice
PASSWORD 'example_secret'

创建指向远程数据库的数据库别名后,可以使用 SHOW ALIASES FOR DATABASE 命令查看其详细信息。

查询
SHOW ALIAS `remote-northwind`
FOR DATABASE
结果
+----------------------------------------------------------------------------------------------------------+
| name               | composite | database               | location | url                       | user    |
+----------------------------------------------------------------------------------------------------------+
| "remote-northwind" | NULL      | "northwind-graph-2020" | "remote" | "neo4j+s://location:7687" | "alice" |
+----------------------------------------------------------------------------------------------------------+

使用驱动程序设置创建远程数据库别名

可以按数据库别名覆盖默认驱动程序设置,这些设置用于连接到远程数据库。

以下是允许用于远程数据库别名的驱动程序设置列表

驱动程序设置是在 CREATE ALIASALTER ALIAS 命令的 DRIVER 子句中设置的。例如,以下查询使用驱动程序设置 connection_timeoutconnection_pool_max_size 创建一个远程数据库别名,用于连接到远程数据库 northwind-graph-2020

查询
CREATE ALIAS `remote-with-driver-settings` FOR DATABASE `northwind-graph-2020`
AT "neo4j+s://location:7687"
USER alice
PASSWORD 'example_secret'
DRIVER {
  connection_timeout: duration({minutes: 1}),
  connection_pool_max_size: 10
}

创建指向远程数据库的数据库别名后,可以使用 SHOW ALIASES FOR DATABASE 命令查看其详细信息。

查询
SHOW ALIAS `remote-with-driver-settings` FOR DATABASE YIELD *
结果
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| name                          | composite | database               | location | url                       | user    | driver                                                   | properties |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| "remote-with-driver-settings" | NULL      | "northwind-graph-2020" | "remote" | "neo4j+s://location:7687" | "alice" | {connection_pool_max_size: 10, connection_timeout: PT1M} | {}         |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

为远程数据库别名设置属性

与本地数据库别名一样,远程数据库别名也可以被赋予属性。然后,这些属性可以在查询中与 graph.propertiesByName() 函数 一起使用。

查询
CREATE ALIAS `remote-northwind-2021` FOR DATABASE `northwind-graph-2021` AT 'neo4j+s://location:7687'
USER alice PASSWORD 'password'
PROPERTIES { newestNorthwind: false, index: 6 }

然后,这些属性将显示在 SHOW ALIASES FOR DATABASE YIELD …​ 命令中。

查询
SHOW ALIAS `remote-northwind-2021` FOR DATABASE YIELD name, properties
结果
+--------------------------------------------------------------+
| name                    | properties                         |
+--------------------------------------------------------------+
| "remote-northwind-2021" | {index: 6, newestnorthwind: FALSE} |
+--------------------------------------------------------------+

修改数据库别名

可以使用 ALTER ALIAS 修改数据库别名,以更改其数据库目标、属性、URL、用户凭据或驱动程序设置。所需权限在 DBMS 别名管理权限 中描述。仅会更改使用的子句。

本地数据库别名不能更改为远程别名,反之亦然。

修改本地数据库别名

修改本地数据库别名目标的示例。

查询
ALTER ALIAS `northwind`
SET DATABASE TARGET `northwind-graph-2021`

修改本地数据库别名后,它将显示在命令 SHOW DATABASES 提供的目标数据库的 aliases 列中。

查询
SHOW DATABASE `northwind-graph-2021`
结果
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| name                   | type       | aliases       | access       | address          | role      | writer | requestedStatus | currentStatus | statusMessage | default | home  | constituents |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| "northwind-graph-2021" | "standard" | ["northwind"] | "read-write" | "localhost:7687" | "primary" | TRUE   | "online"        | "online"      | ""            | FALSE   | FALSE | []           |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

修改远程数据库别名

修改远程数据库别名目标的示例。

查询
ALTER ALIAS `remote-northwind` SET DATABASE
TARGET `northwind-graph-2020` AT "neo4j+s://other-location:7687"

修改远程数据库别名的远程凭据和驱动程序设置

修改远程数据库别名凭据和驱动程序设置的示例。

查询
ALTER ALIAS `remote-with-driver-settings` SET DATABASE
USER bob
PASSWORD 'new_example_secret'
DRIVER {
  connection_timeout: duration({ minutes: 1}),
  logging_level: 'debug'
}

所有驱动程序设置都将被新的设置替换。在本例中,由于没有重复驱动程序设置 connection_pool_max_size,因此该值将被删除并回退到默认值。

从远程数据库别名中删除自定义驱动程序设置

修改远程数据库别名以删除所有自定义驱动程序设置的示例。

查询
ALTER ALIAS `movie scripts` SET DATABASE
DRIVER {}

修改本地和远程数据库别名的属性

修改本地和远程数据库别名属性的示例。

查询
ALTER ALIAS `motion pictures` SET DATABASE PROPERTIES { nameContainsSpace: true, moreInfo: 'no, not really' }
查询
ALTER ALIAS `movie scripts` SET DATABASE PROPERTIES { nameContainsSpace: true }

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

在修改数据库别名时使用 IF EXISTS

ALTER ALIAS 命令可以选择性地是幂等的,其默认行为是在数据库别名不存在的情况下失败并报错。将 IF EXISTS 附加到命令确保在别名不存在的情况下不返回任何错误,也不会发生任何操作。

查询
ALTER ALIAS `no-alias` IF EXISTS SET DATABASE TARGET `northwind-graph-2021`
(no changes, no records)

删除数据库别名

可以使用 DROP ALIAS 命令删除本地和远程数据库别名。所需权限在 DBMS 别名管理权限 中描述。

删除本地数据库别名

删除本地数据库别名。

查询
DROP ALIAS `northwind` FOR DATABASE

当数据库别名被删除后,它将不再显示在SHOW DATABASES命令提供的aliases列中。

查询
SHOW DATABASE `northwind-graph-2021`
结果
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| name                   | type       | aliases | access       | address          | role      | writer | requestedStatus | currentStatus | statusMessage | default | home  | constituents |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| "northwind-graph-2021" | "standard" | []      | "read-write" | "localhost:7687" | "primary" | TRUE   | "online"        | "online"      | ""            | FALSE   | FALSE | []           |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

删除远程数据库别名

删除远程数据库别名。

查询
DROP ALIAS `remote-northwind` FOR DATABASE

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

查询
SHOW ALIASES `remote-northwind` FOR DATABASE
结果
+-----------------------------------------------------+
| name | composite | database | location | url | user |
+-----------------------------------------------------+
+-----------------------------------------------------+

删除数据库别名时使用IF EXISTS

DROP ALIAS命令是可选的幂等命令,默认行为是如果数据库别名不存在则返回错误。在别名名称后面插入IF EXISTS可以确保如果别名不存在,则不会返回错误,也不会发生任何操作。

查询
DROP ALIAS `northwind` IF EXISTS FOR DATABASE
(no changes, no records)