1

- (CREATE EXTENSIONを使用して)インストールcitext拡張子を持っている - と、まだ実行されたクエリは、関数を呼び出すときにこのエラーを投げ続ける:追加モジュールcitextがインストールされていますが、タイプcitextが見つかりません?私は自分のデータベース上のインラインクエリを実行しようとしている

type "citext" does not exist 
DO 
LANGUAGE plpgsql 
$$ 
DECLARE 
    _id INT; 
BEGIN 
    SELECT * FROM "dbo"."MyFunction"(_id, 'some value'::citext); 
END; 
$$; 

私は::citextキャストを省略した場合、それは言う:

function dbo.MyFunction(integer, unknown) does not exist. 
You might need to add explicit type casts. 

citext拡張が追加され、スキーマの一部であり、他のクエリと連動します。これはランダムに出てくる - 何が原因なの?

EDIT: インストールされた拡張機能:

extname | nspname 
----------+----------- 
plpgsql | pg_catalog 
citext | public 
uuid-ossp | public 

検索パス:

show search_path; 
search_path 
----------- 
dbo 
+0

'citext ... schema'の一部である - これはスキーマの一部?実行: 'SELECT e.extname、n.nspname FROM pg_extension e JOIN pg_namespace n ON n.oid = e.extnamespace;そして' show search_path'には何を得ますか? –

+0

はその情報を反映するように更新された質問です。興味深いことに、この問題はインラインクエリでuuid_generate_v4()を使用しようとしているようです。 –

+0

oh man ..これはDataGrip 2016とそれが接続を開始する方法に固有のものかもしれません。私はpgAdminで同じクエリを試しましたが、search_pathには拡張子が含まれていましたが、DataGripには含まれていませんでした。 –

答えて

1

疑われるとして、拡張スキーマは、search_pathから欠落しています。この関連の回答でスキーマ検索パスを設定する方法をよく読んで:

クライアントが間違って設定しているように見えるの接続、上search_path = dboを設定しますように思え。 dboは、Postgresにとって非常に典型的ではないSQL Server(ここではデフォルトのスキーマに使用されていましたか?どのようにそこに着いたか分からない。

1つの選択肢は、同様にdboスキーマに拡張をインストールするには、次のようになります。

することはできさえmove (most) extensions to a different schema

ALTER EXTENSION citext SET SCHEMA dbo; 

しかし、専用のスキーマに拡張機能をインストールしてsearch_pathに含めることをお勧めします。

いずれにしてもplpgsqlのままにしておいてください。デフォルトでインストールされており、pg_catalogに留まる必要があります。

ちょっと変わって、search_pathの設定を変えて混乱を取り除いてください。


これは、Function Type Resolutionのルールに基づいています。citextにはtextへの暗黙的キャストがないため、呼び出しを解決することはできません。関連

関連する問題