我发现这个非常简单的postgresql 9.6函数
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
。确切的错误是:
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。如果你不是这样的话,你会很感兴趣。我有以下线索:
idx_temp_data_to_index_thisthat
或idx_temp_data_to_index_unique
的创建解决了这个问题。真的很感激你的想法。
发布于 2017-03-31 20:26:54
这似乎是由citus数据扩展引起的。此错误是由超过默认堆栈2M时发生的损坏内存造成的。它不会出现在日志中,也永远不会达到可能抛出的“堆栈深度超过”异常。
这都是推测性的指责。
卸载citus扩展为我解决了这个问题。
发布于 2016-10-25 19:13:10
我想在that_id smallint NOT NULL
之后缺少一个逗号
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;
https://stackoverflow.com/questions/40247599
复制相似问题