首页 > 解决方案 > 如何从另一个数据库(不是 postgres)创建引用表?

问题描述

我尝试创建新数据库,当其中的表时,然后将它们分发,但不能在新数据库中使用 create_reference_table() (未找到)。如果我尝试运行 create_reference_table('newbie.schema.new_table) 我将收到错误“错误:未实现跨数据库引用”:

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(unknown) 不存在看起来像恶性循环(

标签: citus

解决方案


您需要分别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');

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

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()以在新数据库中添加工作节点。工作人员元数据也存储在关联的数据库中。


推荐阅读