1

PostgreSQLの関数xyz()が与えられた場合、実際にどこでどのように使用できますか?

current_database()たとえば、関数を考えてみましょう。次に、次のクエリを実行できます。

SELECT current_database();
SELECT * FROM current_database();

この場合、どちらも次の出力になります。

 current_database
------------------
 cassava
(1 row)

この機能を使用できる場所は他にありますか?

特に、それが機能するように、次のように書くにはどうすればよいでしょうか (現状では機能しないため)。

GRANT ALL ON DATABASE current_database() TO GROUP wheel WITH GRANT OPTION;
4

2 に答える 2

1

構文には識別子が必要であり、識別子を返す式ではないため、純粋なSQLでGRANTALLの例を実行することはできません。

SQLステートメントで式を使用できる場所であればどこでも、関数を使用できるはずです。

それを超えて、クエリ文字列を動的に構築するには、plpgsql(または他の手続き型言語の1つ)を使用する必要があります。

于 2013-01-18T14:16:38.827 に答える
0

Richard Huxton の言うとおりです。SQL ステートメントでを使用できる場合は、関数を使用できる必要があります。

ただし、 PostgreSQL にはDO 拡張機能があり、関数を作成しなくても手続き型言語を実行できます。これにより、動的クエリを簡単に作成できます。

特定の状況の場合 (省略WITH GRANT OPTION):

DO $$
    BEGIN
    EXECUTE 'GRANT ALL ON DATABASE ' || current_database() || ' TO GROUP wheel';
    END;
$$;

これにより、関数をどこでも効果的に使用できます。

于 2013-01-21T08:45:25.543 に答える