私はこのかなり簡単なのPostgreSQL 9.6の機能PostgreSQLのエラー:一時テーブルの上に「スキーマ 『』存在しない」
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
であり、2回目以降の実行で確実に発生します。上記のSQLチャンクをカット/ペーストすると、エラーが再現されます。それはあなたの場合ではない場合はかなり興味があります。私は以下の手がかりを持っています:
- エラーメッセージで検出されたスキーマが異なります。ほとんどの場合、 ""として報告されますが、 "0MA {Start of Text}"やSQLステートメント/コメントのスニペットのようなものがトランザクションの前のステートメントから報告されます。メモリポインタ関連の音を出す。
- エラーが一貫して発生します。
- 私が関数を作成または置換すると、1回実行され、エラー状態が再び発生します。
- 新しいpgadminIIIウィンドウを開くと(ドロップまたは再作成せずに)、同じウィンドウが表示されても同じエラーが発生します。接続関連の音がする。
idx_temp_data_to_index_thisthat
またはidx_temp_data_to_index_unique
の作成をコメントアウトすると、問題が解決されます。- gcc(GCC)4.4.7 20120313(Red Hat 4.4.7-16)、64ビット版、および9.6実装でコンパイルされたx86_64-pc-linux-gnuのPostgreSQL 9.5.3で発生します。
- 上記の関数が別の関数から実行された場合、上記のCREATE OR REPLACE FUNCTION 1回の解決は、子関数を置き換えるときにのみ、親関数では機能しません。それが別のpgadminウィンドウで発生するかどうかは関係ありません。 PSはクライアントやトランザクションのようなものではありません。
本当にありがとうございます。
正確なpgのバージョン( 'select version();')は何ですか? –
gcc(GCC)によってコンパイルされたx86_64-pc-linux-gnuのPostgreSQL 9.5.3 4.4.7 20120313(Red Hat 4.4.7-16)、64ビット-gnu – Vic
これはすべて非常に奇妙です。両方のpgバージョン。エラーを再現できません。 'idx_temp_data_to_index_thisthatまたはidx_temp_data_to_index_uniqueのどちらかを削除すると問題が解決されます.'ということを明確にすることができますか?インデックスを削除するか、関数から作成を削除しますか? –