sql >> データベース >  >> RDS >> PostgreSQL

SQL状態:42883、指定された名前と引数のタイプに一致する関数はありません。しかし、その機能は実際に存在します

    おそらくスキーマとスキーマの問題search_path 。関数は、作成ユーザーのデフォルトスキーマで作成されます。それがsearch_pathにない場合 現在のユーザーの場合、表示されません。

    詳細:

    通常、スキーマpublicでパブリック関数を作成します そして、そのスキーマをeverbodyのsearch_pathに入れます 。

    CREATE OR REPLACE FUNCTION public.fun_validatepost(integer, integer)
      RETURNS integer AS
    $BODY$
    ...
    $BODY$ LANGUAGE plpgsql;
    ALTER FUNCTION public.fun_validatepost(integer, integer) OWNER TO postgres;

    スキーマ修飾は、publicの場合にのみ必要です とにかくデフォルトのスキーマではありません。

    また、GRANT コマンドは意味がありません。 EXECUTE 関数の権限はpublicに付与されます デフォルトでは。そして、publicに付与すると 、他のユーザーに付与する必要はありません。特にpostgresではありません 、これはOWNERです とにかくスーパーユーザーも。 マニュアル:

    USAGEを付与する必要があります SCHEMAで 関数が作成される場所。 public スキーマはUSAGEを付与します publicへ (全員)デフォルトで。

    脇1

    integerへのキャスト 小数点のない数値リテラルは自動的に整数に強制変換されるため、ここでは何も変更されません。 マニュアルの定数の詳細。

    脇2

    現在のバージョンのPostgresに更新することを早急に検討してください。ソフトウェアは完全に古くなっています。




    1. CSVファイルデータをPostgreSQLテーブルにインポートする方法は?

    2. Magentoのインストール-識別子名が長すぎます

    3. psql-コマンドの結果をファイルに保存します

    4. MySqlデータベースでAspNet.Identityコアを使用する方法