警告

多节点支持已弃用.

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 上编辑此页