2016-04-12 40 views
0

'daki yeniden işlevlendirme işlev tanımları Postgres 8.4'teki bir veritabanı ile 9.3'te çalışan bir işlev arasında işlev tanımları oluşturmaya çalışıyorum. AncakPostgreSQL

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 
[....] 

9.3 içine bu sql komut dosyası yüklemeye çalışırken bana bir sözdizimi verir:

Bana şöyle çıkış verir Hangi

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'; 

kullanılarak 8.4 sunucuda işlev tanımları dampingli hata.

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

Burada yanlış yapıyorum?

+5

Her işlevin 'END' satırından sonra yarım virgül olmasın mı? – Glenn

+0

@Glenn 'END' sonrası isteğe bağlıdır, ancak oluşturma ifadeleri arasında bir tane olmalıdır (her kapanıştan sonra $ $ işlevini gösterir). – pozs

cevap

1

pg_dump -U $user -h $host -s -n <schema name> yapmasını ve buradan işlev tanımlarını almayı düşünün. Bonus olarak, tüm izin verme ifadelerini de alırsınız.