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

时间:2019-03-14 13:50:12

标签: citus

我尝试在表中创建新的db时,然后将它们分发,但是无法在新的db中使用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(未知)不存在 看起来像是恶性循环(

1 个答案:

答案 0 :(得分:0)

您需要分别在所有数据库上运行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()在新数据库中添加工作程序节点。工作者元数据也存储在关联的数据库中。