web-dev-qa-db-ja.com

完全なストアドプロシージャコードを表示する方法

ストアドプロシージャ/関数をどのように表示しますか?

元の定義のない古い関数があるとします-pg/psqlで何をしているのかを見たいのですが、それを行う方法がわからないようです。

postgresバージョン8.4.1を使用

96
darren

ストアドプロシージャのソースを取得するには、pgAdminまたは pg_proc を使用します。 pgAdminも同様です。

19
Frank Heikens

\df+ <function_name> in psql

214
Milen A. Radev

\ef <function_name> psqlで。関数全体に編集可能なテキストを提供します。

126
Asha Koshti
SELECT prosrc FROM pg_proc WHERE proname = 'function_name';

これは、関数を呼び出す方法を関数ハンドラーに伝えます。実装言語/呼び出し規約に応じて、インタープリター言語の関数の実際のソースコード、リンクシンボル、ファイル名、またはその他のほぼすべてのコードになります。

51
Maxim

\dfを使用して、Postgresのすべてのストアドプロシージャを一覧表示します。

12
Puneet Purohit

カタログテーブルをすばやくクエリしてpg_get_functiondef()関数を使用する方法を疑問に思う方は、サンプルクエリをご覧ください。

SELECT n.nspname AS schema
      ,proname AS fname
      ,proargnames AS args
      ,t.typname AS return_type
      ,d.description
      ,pg_get_functiondef(p.oid) as definition
--      ,CASE WHEN NOT p.proisagg THEN pg_get_functiondef(p.oid)
--            ELSE 'pg_get_functiondef() can''t be used with aggregate functions'
--       END as definition
  FROM pg_proc p
  JOIN pg_type t
    ON p.prorettype = t.oid
  LEFT OUTER
  JOIN pg_description d
    ON p.oid = d.objoid
  LEFT OUTER
  JOIN pg_namespace n
    ON n.oid = p.pronamespace
 WHERE NOT p.proisagg
   AND n.nspname~'<$SCHEMA_NAME_PATTERN>'
   AND proname~'<$FUNCTION_NAME_PATTERN>'
7
msciwoj

通常、 pgAdmin のようなDBマネージャーアプリケーションを使用し、目的のオブジェクトを参照し、「スクリプトを作成する」などの方法で右クリックします。

管理アプリなしでこれを実行しようとしていますか?

0
annakata

システムで設定されている場合は、phpPgAdminで取得することもできます。

ステップ1:データベースを選択する

ステップ2:検索ボタンをクリック

ステップ3:検索オプションを機能に変更し、[検索]をクリックします。

定義された関数のリストを取得します。名前で関数を検索することもできます。この回答が他の人にも役立つことを願っています。

0