如何从另一个数据库(不是 postgres)create_reference_table?

How to create_reference_table from another DB (not postgres)?

我试图创建新数据库,当其中有表时,然后使它们分布,但不能在新数据库中使用 create_reference_table()(未找到)。 如果我尝试 运行 create_reference_table('newbie.schema.new_table) 我会得到错误 "ERROR: cross-database references are not implemented":

CREATE DATABASE newbie;
SELECT * from master_add_node('citus-worker1', 5432);
SELECT * from master_add_node('citus-worker2', 5432);
SELECT run_command_on_workers('CREATE DATABASE newbie;');

\c newbie

create table new_table
SELECT create_reference_table('schema.new_table');

导致 错误:函数 create_reference_table(未知)不存在 看起来像恶性循环(

您需要在所有数据库上分别 运行 CREATE EXTENSION Citus(当然,如果您想在这些数据库中分发一些表)。 Citus 将分布式对象元数据存储在相关数据库中。

这些步骤应该有效:

\c newbie
CREATE EXTENSION Citus;
CREATE SCHEMA s;
CREATE TABLE s.new_table(id int);
SELECT create_reference_table('s.new_table');

如果您在启用 Citus 扩展程序时 运行 CREATE DATABASE ...,您可以看到帮助消息:

postgres=# create database new_db;
NOTICE:  Citus partially supports CREATE DATABASE for distributed databases
DETAIL:  Citus does not propagate CREATE DATABASE command to workers
HINT:  You can manually create a database and its extensions on workers.

另外不要忘记 运行 master_add_node() 在新数据库中添加工作节点。工作人员元数据也存储在关联的数据库中。