警告

多节点支持已停止.

TimescaleDB v2.13 是最后一个包含对 PostgreSQL 13、14 和 15 版本多节点支持的版本。

在访问节点上添加一个新的数据节点,供分布式超表使用。数据节点添加后,新创建的分布式超表会自动使用该数据节点,而现有的分布式超表需要额外执行 attach_data_node

如果数据节点已存在,则该命令会中止并显示错误或通知,具体取决于 if_not_exists 的值。

出于安全考虑,只有超级用户或具有必要权限的用户才能添加数据节点(详情见下文)。添加数据节点时,访问节点也会尝试连接到该数据节点,因此需要一种方式进行身份验证。TimescaleDB 目前支持多种不同的身份验证方法以提高灵活性(包括信任、用户映射、密码和证书方法)。请参阅 设置多节点 TimescaleDB 了解更多关于节点间身份验证的信息。

除非 bootstrap 为 false,否则该函数会尝试通过以下方式引导数据节点:

  1. 创建 database 中指定的数据库,该数据库将用作新的数据节点。
  2. 在新数据库中加载 TimescaleDB 扩展。
  3. 设置元数据以使数据节点成为分布式数据库的一部分。

请注意,在引导过程中,新数据节点上不会自动创建用户角色。可以使用 distributed_exec 过程在数据节点添加后创建更多角色。

名称描述
node_name数据节点的名称。
host远程数据节点的主机名。
名称描述
database创建远程超表的数据库名称。默认为当前数据库名称。
port在远程数据节点上使用的端口。默认为执行此函数的访问节点使用的 PostgreSQL 端口。
if_not_exists如果数据节点已存在,则不报错。默认值为 FALSE
bootstrap引导远程数据节点。默认值为 TRUE
password在引导或验证期间用于向远程数据节点进行身份验证的密码。只有当数据节点需要密码身份验证且访问节点的本地密码文件中不存在该用户的密码时,才需要提供密码。如果未使用密码身份验证,则忽略指定的密码。
描述
node_name数据节点本地使用的名称
host远程数据节点的主机名
port远程数据节点的端口
database远程数据节点上使用的数据库名称
node_created数据节点是否在本地创建
database_created数据库是否在远程数据节点上创建
extension_created扩展是否在远程数据节点上创建

以下情况会报错:

  • 该函数在事务中执行。
  • 该函数在已是数据节点的数据库中执行。
  • 数据节点已存在且 if_not_existsFALSE
  • 由于网络故障或配置无效(例如,端口错误或无法对用户进行身份验证),访问节点无法连接到数据节点。
  • 如果 bootstrapFALSE 且数据库之前未被引导。

要添加数据节点,您必须是超级用户或对 timescaledb_fdw 外部数据包装器拥有 USAGE 权限。要授予常规用户角色此类权限,请执行:

GRANT USAGE ON FOREIGN DATA WRAPPER timescaledb_fdw TO <newrole>;

然而,请注意,在数据节点上可能仍需要超级用户权限才能引导它,包括在数据节点上创建 TimescaleDB 扩展,除非它已经安装。

如果您有一个现有超表 conditions 并希望使用 time 作为范围分区列,使用 location 作为哈希分区列。您还希望将超表的块分布到两个数据节点 dn1.example.comdn2.example.com

SELECT add_data_node('dn1', host => 'dn1.example.com');
SELECT add_data_node('dn2', host => 'dn2.example.com');
SELECT create_distributed_hypertable('conditions', 'time', 'location');

如果您想创建一个分布式数据库,其中两个数据节点位于此实例的本地,您可以这样写:

SELECT add_data_node('dn1', host => 'localhost', database => 'dn1');
SELECT add_data_node('dn2', host => 'localhost', database => 'dn2');
SELECT create_distributed_hypertable('conditions', 'time', 'location');

请注意,这与使用普通超表相比不提供任何性能优势,但可用于测试。

关键词

在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页面 在 GitHub 上。