我发现这个相当简单的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块会为我重现错误....非常感兴趣,如果不适合你。我有以下线索:
idx_temp_data_to_index_thisthat
或idx_temp_data_to_index_unique
的创建可以解决问题。真的很感激你的想法。
答案 0 :(得分:1)
我认为在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;
答案 1 :(得分:1)
这似乎是由citus数据扩展引起的。该错误是由超出默认堆栈2M时发生的内存损坏引起的。它不会显示在日志中,也不会使其超出本应抛出的“超出堆栈深度限制”异常。
这都是投机指责。
卸载citus扩展程序为我解决了这个问题。