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

すべての手続き型のユーザー定義関数を取得します

    検討してください:

    select 
        pp.proname,
        pl.lanname,
        pn.nspname,
        pg_get_functiondef(pp.oid)
    from pg_proc pp
    inner join pg_namespace pn on (pp.pronamespace = pn.oid)
    inner join pg_language pl on (pp.prolang = pl.oid)
    where pl.lanname NOT IN ('c','internal') 
      and pn.nspname NOT LIKE 'pg_%'
      and pn.nspname <> 'information_schema';
    

    参照: postgresqlで既存の関数のスクリプトを検索するコマンドは何ですか?

    pg_get_functiondefを使用します またはprosrc pg_procの列 直接。重要なアイデアは、pg_namespaceに参加することです PostgreSQLカタログ関数を除外します。これはおそらくほとんどの目的に適しています:

    FROM pg_proc pp INNER JOIN pg_namespace ON (pp.pronamespace = pn.oid)
    WHERE pn.nspname <> 'pg_catalog'
    

    ユーザー定義のソースコードを取得する際の問題 関数は、どのユーザーを決定しています 意味。多くの種類の関数を作成できます:

    • CREATE EXTENSIONを使用する関数 。
    • PostgreSQLによって作成された関数。
    • 管理者によってコンパイルおよびインストールされた関数。

    十分な権限を持つスーパーユーザーは、pg_procで関数を定義できます。 、しかし通常はしません。

    スーパーユーザーのみがC言語関数を作成できるため、それらを除外します。このような機能は、管理者が特定のデータベースにカスタムインストールできますが、通常のユーザーはインストールできません。




    1. MySQLクエリ/句の実行順序

    2. sqlplus でスプールを使用してヘッダーを作成する際の問題

    3. SQL Server 2008:1000 個のテーブルがあり、どのテーブルにデータがあるかを知る必要があります

    4. OracleテーブルのデータをINSERTステートメントにダンプします