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

すべてのユーザー定義(拡張機能関連ではない)関数を見つける方法は?

    @Craigがコメントしたように、依存関係はpg_catalog.pg_depend

    クエリは次のようになります( Postgres 11 またはそれ以降):

    SELECT p.proname AS function_name
         , pg_get_function_identity_arguments(p.oid) AS parameter_list
         , pg_get_functiondef(p.oid) AS function_def  -- CREATE FUNCTION statement
    FROM   pg_proc p
    LEFT   JOIN pg_depend d ON d.objid = p.oid 
                           AND d.deptype = 'e'        -- would depend on extension
    WHERE  p.pronamespace = 'public'::regnamespace    -- your schema(s) of interest
    AND    d.objid IS NULL                            -- no such dependency
    AND    p.prokind = 'f';                           -- only plain functions
    

    これにより、拡張子に応じたすべての関数が結果から除外されます。 マニュアル 依存関係タイプについてdeptype = 'e'

    そしてp.prokind = 'f' 結果を単純な関数に制限します。 マニュアル:

    これはPostgres11の新機能です。Postgres10以前の場合 代わりに使用してください:

    SELECT ...
    ...
    AND    NOT proisagg     -- no aggregate functions
    AND    NOT proiswindow  -- no window functions
    

    手順はありませんでした 、まだ。

    pg_get_function_identity_arguments()を見つけます およびpg_get_functiondef() こちらのマニュアル 。関連:




    1. Android-SQLite-Date1とDate2の間で選択

    2. PHPPDOプリペアドステートメントでのMySQL関数の使用

    3. MySQLで列の名前を変更します

    4. MySQLがCaseステートメントで結合