首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在citus (postgres)上创建分布式表时出错

在citus (postgres)上创建分布式表时出错
EN

Stack Overflow用户
提问于 2019-08-29 15:43:04
回答 1查看 1.1K关注 0票数 1

我在Citus上创建了一个表:CREATE TABLE myschema.mytable

然后,我创建了从表myschema.mytable获取数据的函数:

代码语言:javascript
复制
CREATE FUNCTION myschema.myfunction(id INT)
RETURNS INT AS $$
DECLARE approved_count INT;
BEGIN
SELECT COUNT(id) INTO approved_count 
FROM myschema.mytable
WHERE id = $1 AND is_deleted = FALSE AND is_flagged = TRUE;
RETURN approved_count;
END;
$$ LANGUAGE plpgsql

然后我在表myschema.mytable上添加了约束:

代码语言:javascript
复制
ALTER TABLE myschema.mytable ADD CONSTRAINT myconstraint CHECK ((myschema.myfunction()=(0)));

以上所有查询都已成功执行。

最后,我创建了一个分布式表:

代码语言:javascript
复制
SELECT create_distributed_table('myschema.mytable', 'tenant_id');

我得到了错误:

代码语言:javascript
复制
ERROR:  function myschema.myfunction() does not exist
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
CONTEXT:  while executing command on 10.0.0.***:****
SQL state: 42883

我试着按另一个顺序运行查询。我成功地创建了一个表、分布式表和函数。但我无法添加约束,得到了同样的错误。

据我所知,我的工人没有看到我的作用。我如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-03 07:48:13

Citus目前不将CREATE FUNCTION查询传播到工作节点。您需要自己在员工中手动创建函数。

还可以使用以下查询在工作节点中手动创建函数:

代码语言:javascript
复制
SELECT *
FROM run_command_on_workers($cmd$
  CREATE FUNCTION myschema.myfunction(id INT) RETURNS INT AS
  $$ DECLARE approved_count INT;
    BEGIN 
    SELECT 
      COUNT(id)
    INTO
      approved_count 
    FROM 
      myschema.mytable 
    WHERE 
      id = $1 
      AND is_deleted = FALSE 
      AND is_flagged = TRUE;
    RETURN approved_count;
    END;
  $$ LANGUAGE plpgsql
$cmd$);

您可能还需要在工作节点上创建myschema (取决于您的Citus版本)。您还可以使用run_command_on_workers() udf和CREATE SCHEMA IF NOT EXISTS命令来完成这一任务。

您可以查看run_command_on_workers() 这里的文档。

FYI:我目前正在开发一个特性,用于在工作节点中分发函数。我们计划在下一版的“奇图斯”中发布。

编辑:create_distributed_function UDF在>= v9.0中,您可以在udf.html#create-distributed-function上看到文档,在https://docs.citusdata.com/en/v9.0/faq/faq.html#how-do-i-create-database-roles-functions-extensions-etc-in-a-citus-cluster中可以看到更多。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57713649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档