2012-01-20 23 views
4

私は編集したいデータベースに定義された関数(ストアドプロシージャ)を持っています。PostgreSQL:関数定義をSQLにエクスポートするには

私はこれを行う方法の1つは、SQLファイルに関数定義をダンプし、SQLファイルを編集してから、データベースの定義を編集したバージョンに置き換えることだと思います。

これを行うことは可能ですか(SQLファイルに定義をダンプしますか)?

過去に私がやってきたことは、psqlを使ってデータベースに接続し、/ df +関数を実行し、出力をテキストファイルにコピーし、テキストをマッサージして関数宣言のように見せますが、これは時間です私はそれを行うより洗練された方法があるのだろうかと思っています。

私はPostgreSQL 9.1を使用しています。

EDIT:

彼はpsqlで\ efの機能を実行するようにした彼のコメントで正しい答えを提供するので、私はマイクBulandの答えを受け入れました。

答えて

5

これは実際に前の質問に記載されて:

SELECT proname, prosrc 
FROM pg_catalog.pg_namespace n 
JOIN pg_catalog.pg_proc p 
ON  pronamespace = n.oid 
WHERE nspname = 'public'; 

List stored functions that reference a table in PostgreSQL

あなたはPROCの現在のテキストを読んで行うには、コマンドラインまたはクライアントでこれを使用することができるはずです何でもあなたはそれをみたい:)

私はそれは私はあなたが戻って一歩を踏み出すと、ここでのルートの問題を参照してくださいする必要があると思う

+0

答えてくれてありがとうございますが、\ df +がすでに行っていること以上のことを私に与えるものではありません。私は "CREATE OR REPLACE FUNCTION ...(...)"の部分を含む完全なSQLを含むものを期待していたので、毎回出力をマッサージする必要はありません。 –

+6

ああ、私は間違っていた、新しいポストグアを試してみてください: \ ef

+0

ありがとう、それは私が探していたものです。 –

1

に役立ちます願っています。あなたのファイル(データベースオブジェクト)をバージョン管理するためにバージョンコントロールを使用していないのはどちらですか?無料のものはたくさんありますが、GitとMercurialにはいくつか挙げられます。したがってpsqlまたはMikeが提供したクエリを使用して、構造体をダンプしてバージョン管理に入れてください。バージョン管理からチェックアウトし、そこで編集を行います。このバージョン管理システムからデータベースサーバーにコードをデプロイする必要があります。また、バージョンコントロールのコードとデータベースのコードが自動化されたものであることを定期的に照合すると便利です。理論的には、厳密なプロセスがあれば、ソース管理にチェックインされていないコードはデータベースに決して置かれず、ソース管理がデータベースの内容と一致するかどうかは不思議ではありません。しかし、私は管理者アクセス権を持つ人たちが特権を乱用しないように信じていないので、私はこれを確認するための措置を講じる。誰かが他の方法で対処できる自分の特権を悪用していると判明した場合。

+0

私はあなたの正直さに感謝し、私の質問にあなたがあまりにも多くを読んでいると思うが、あなたの批判を考慮に入れます。 –

+1

ご質問の文脈で私は同意します。しかし、あなたと私が一緒に働いて、これが私があなたに与える答えが出てきたなら、私がここに提出した答えです。私は上流の不足を回避することは嫌いです。たぶんあなたのケースでは、あなたがこれらの欠点を持つシステムにちょうど立ち往生しているかどうかわからないので少し厳しいかもしれませんし、当面はそれらを回避する必要があります。 – Kuberchaun

2

ます。また、関数の引数が必要になります。

SELECT p.proname 
    , pg_catalog.pg_get_function_arguments(p.oid) as params 
    , p.prosrc 
FROM pg_catalog.pg_proc p 
WHERE oid = 'myschema.myfunc'::regproc; 

あるいは、パラメータを持つ関数について、それを明確にする:

WHERE oid = 'myschema.myfunc(text)'::regprocedure; 

それとも、あなたがより多くの記述何をするpgAdminを使用することができます快適に。オブジェクトを再作成するための完全なSQLスクリプトが表示され、それを自動的に編集ウィンドウにコピーするオプションがあります。編集して実行します。

+0

あなたは多くの機能を持っています! – markmnl

+0

@Fëanor:スクリーンショットを削除しましたが、必要ありません。簡略化されたクエリも。 –

関連する問題