我试图在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
我在这里做错了什么?
答案 0 :(得分:1)
考虑做pg_dump -U $user -h $host -s -n <schema name>
并从中获取函数定义。作为奖励,您还将获得所有许可设置声明。