6

関数のコードを選択できるようにしたい。このクエリを試すと:

select prosrc from pg_proc where proname = 'my_proc'

空の列を取得します。

問題は、列 prosrc が関数テキストを保持しているようです。このクエリを試すと:

select proname from pg_proc where prosrc ~* 'part of Function text'

関数の正しい数と名前を取得します。prosrcが表示されないだけです。何か案が?

PostgreSQL 8.2。pgAdmin III 1.12.2。

ありがとう。

4

4 に答える 4

2

PostgreSQL9.0.3でpgAdminIIIを使用してこれにも遭遇しました。これは、文字列が長すぎてpgAdminIIIが正しく表示されないことに関連しているように見えます。コマンドプロンプトで実行すると、大丈夫です。多くのデータベース管理ツールで文字列の切り捨ての問題が発生します。

興味深いことに、pgAdmin IIIでprosrcセルを選択し、それをキーボードでコピーすると、出力を貼り付けることができます。これはおそらく、ある種の奇妙な表示バグです。

于 2011-03-31T17:45:46.930 に答える
2

の値がprosrc改行で始まることが多いためです。通常、関数を作成するときは、関数テキストを引用する $$ (または $whatever$) の後に新しい行を開始します。

CREATE FUNCTION myfunction() RETURNS integer AS $$
    SELECT 1
$$ LANGUAGE sql;

それを次のように定義した場合:

CREATE FUNCTION myfunction() RETURNS integer AS $$SELECT 1$$ LANGUAGE sql;

関数テキストに改行はありません。

ltrim 関数を使用して先頭の改行を切り取ることができます。

SELECT ltrim(prosrc, E'\x0a') FROM pg_proc WHERE proname = 'myfunction';

または、PGAdmin で行を垂直方向にサイズ変更すると、完全な値が表示されます。

于 2013-08-30T11:15:11.947 に答える