2016-04-12 4 views
0

Postgres 8.4のデータベースと9.3のデータベース間の関数定義を再作成しようとしています。PostgreSQLでの関数定義の再作成

私は私にそうような出力を提供します

SELECT pg_get_functiondef(f.oid) 
    FROM pg_catalog.pg_proc f 
    INNER JOIN pg_catalog.pg_namespace n ON (f.pronamespace = n.oid) 
    WHERE n.nspname = 'public'; 

を使用して8.4サーバー上の関数定義をダンプ:9.3には、このSQLスクリプトをロードしようとしたときに

CREATE OR REPLACE FUNCTION public.delete_fentity() 
RETURNS trigger 
LANGUAGE plpgsql 
AS $function$ 
DECLARE 
BEGIN 
     DELETE FROM fentities WHERE fitnummer=OLD.fitnummer; 
     RETURN new; 
END 
$function$ 

CREATE OR REPLACE FUNCTION public.validate_leveranciersrollen_deletion() 
RETURNS trigger 
LANGUAGE plpgsql 
AS $function$ 
DECLARE 
BEGIN 
     IF  NOT EXISTS 
         (
         SELECT * 
         FROM leveranciersrollen 
         WHERE organisaties_id=OLD.organisaties_id 
         AND  levrol='contactpersoon' 
         ) 
       AND 
         (
         EXISTS 
[....] 

は、しかし、それは私の構文を提供しますエラー。

ERROR: syntax error at or near "CREATE" 
LINE 11: CREATE OR REPLACE FUNCTION public.validate_leveranciersrolle 

私はここで間違っていますか?

+5

各関数の 'END'行の後ろにセミコロンを入れてはいけませんか? – Glenn

+0

@Glennの 'END'の後にはオプションですが、(' $ function $ 'を閉じるたびに)create文の間に1つあるはずです。 – pozs

答えて

1

pg_dump -U $user -h $host -s -n <schema name>を実行し、そこから関数定義を取得することを検討してください。ボーナスとして、すべての権限設定文も取得します。