首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >postgresql错误:临时表上的“schema”不存在

postgresql错误:临时表上的“schema”不存在
EN

Stack Overflow用户
提问于 2016-10-25 18:55:07
回答 2查看 4K关注 0票数 3

我发现这个非常简单的postgresql 9.6函数

代码语言:javascript
运行
复制
CREATE OR REPLACE FUNCTION public.trying_to_index_me()
RETURNS VOID  AS
$BODY$
    BEGIN
    CREATE TABLE public.table_to_index ( 
        id INTEGER NOT NULL,    
        this_id UUID NOT NULL,
        that_id smallint NOT NULL,
        CONSTRAINT idx_table_to_index_unique
            UNIQUE (id,this_id,that_id)     
    ); 
    CREATE INDEX idx_table_to_index_thisthat ON public.table_to_index(this_id,that_id);  
    DROP TABLE public.table_to_index;
END;
$BODY$ LANGUAGE plpgsql;

--SELECT public.trying_to_index_me();

导致了一个schema "" does not exist error。确切的错误是:

代码语言:javascript
运行
复制
ERROR:  schema "" does not exist
SQL state: 3F000
Context: SQL statement "CREATE INDEX idx_table_to_index_thisthat 
ON public.table_to_index(this_id,that_id)" 
PL/pgSQL function trying_to_index_me() line 10 at SQL statement

并在第二次和随后的执行中可靠地发生。剪切/粘贴上面的SQL块会复制error...for me。如果你不是这样的话,你会很感兴趣。我有以下线索:

  • 错误消息中检测到的架构各不相同。大多数情况下,它被报告为"",但其他如“0MA{ Text}”或事务中上一条语句中sql语句/注释的一些片段。与内存指针相关的声音。
  • 一旦进入,它就会不断出错。
  • 我发现,如果我创建或替换函数,我将得到一个执行,然后错误的状态将再次发生。
  • 我发现,如果我打开一个新的pgadminIII窗口(没有删除或重新创建),我将得到相同的执行,然后错误状态将发生again...regardless,如果它是在另一个窗口中错误的。听起来和联系有关。
  • 我发现注释掉idx_temp_data_to_index_thisthatidx_temp_data_to_index_unique的创建解决了这个问题。
  • 发生在"PostgreSQL 9.5.3在x86_64-pc上,由gcc (GCC) 4.4.7 20120313 (RedHat4.4.7-16)编译,64位“和9.6实现中。
  • 如果上述函数是从另一个函数执行的,则上述CREATE替换函数1-时间解析仅在替换子函数时不适用于父函数。如果这种情况发生在单独的pgadmin窗口中,也不重要。PSounds既不喜欢客户端也不喜欢事务。

真的很感激你的想法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-31 20:26:54

这似乎是由citus数据扩展引起的。此错误是由超过默认堆栈2M时发生的损坏内存造成的。它不会出现在日志中,也永远不会达到可能抛出的“堆栈深度超过”异常。

这都是推测性的指责。

卸载citus扩展为我解决了这个问题。

票数 1
EN

Stack Overflow用户

发布于 2016-10-25 19:13:10

我想在that_id smallint NOT NULL之后缺少一个逗号

代码语言:javascript
运行
复制
CREATE OR REPLACE FUNCTION trying_to_index_me()
RETURNS VOID  AS
$BODY$
    BEGIN
    CREATE Temporary TABLE temp_data_to_index ( 
        id INTEGER NOT NULL,    
        this_id UUID NOT NULL,
        that_id smallint NOT NULL,
        CONSTRAINT idx_temp_data_to_index_unique
            UNIQUE (id,this_id,that_id)     
    ); 
    CREATE INDEX idx_temp_data_to_index_thisthat ON temp_data_to_index(this_id,that_id);  
    DROP TABLE temp_data_to_index;
END;
$BODY$ LANGUAGE plpgsql VOLATILE COST 100;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40247599

复制
相关文章

相似问题

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