在PostgreSQL

时间:2016-04-12 11:58:05

标签: sql database postgresql postgresql-9.3 psql

我试图在Postgres 8.4上的数据库和9.3上运行的数据库之间重新创建函数定义。

我使用

将功能定义转储到8.4服务器上
    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';

这给了我这样的输出:

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

但是,当尝试将此sql脚本加载到9.3时,它会给我一个语法错误。

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

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

考虑做pg_dump -U $user -h $host -s -n <schema name>并从中获取函数定义。作为奖励,您还将获得所有许可设置声明。