我第一次尝试在PostgreSQL中使用自定义函数,例如first and last什么是好的,可能会看到here。
由于我通过.NET使用PostgreSQL,我有备份和恢复数据库的功能,长期以来也很好用。
现在,当我在PostgreSQL中有自定义函数时,我无法获得归档数据库
这是从CMD窗口复制的系统说的:
pg_restore:创建FUNCTION first_agg(anyelement,anyelement)
pg_restore:[archiver(db)]处理TOC时出错:
pg_restore:[archiver(db)]来自TOC条目208的错误; 1255 42417功能first_ post(任意元素,任意元素)postgres
pg_restore:[archiver(db)]无法执行查询:ERROR:function“first_agg “已存在相同的参数类型
命令是:CREATE FUNCTION first_agg(anyelement,anyelement)RETURNS anyel EMENT
LANGUAGE sql IMMUTABLE STRICT
AS $ _ $ SE ...
pg_restore:创建FUNCTION last_agg(anyelement,anyelement)
pg_restore:[archiver(db)]来自TOC条目212的错误; 1255 42419功能last_a postgres gg(anyelement,anyelement) pg_restore:[archiver(db)]无法执行查询:ERROR:function“last_agg”
已经存在相同的参数类型
命令是:CREATE FUNCTION last_agg(anyelement,anyelement)RETURNS anyele 换货
LANGUAGE sql IMMUTABLE STRICT
AS $ _ $ SEL ...
pg_restore:首先创建AGGREGATE(任意元素)
pg_restore:[archiver(db)]来自TOC条目654的错误; 1255 42418首先聚集 (任何元素)postgres
pg_restore:[archiver(db)]无法执行查询:ERROR:function“first”al ready存在与相同的参数类型
命令是:首先创建AGGREGATE(任意元素)(
SFUNC = first_agg,
STYPE = anyelement
);
pg_restore:最后创建AGGREGATE(anyelement)
pg_restore:[archiver(db)]来自TOC条目655的错误; 1255 42420 AGGREGATE last( postgres
pg_restore:[archiver(db)]无法执行查询:错误:函数“last”alr eady存在相同的参数类型
命令是:CREATE AGGREGATE last(anyelement)(
SFUNC = last_agg,
STYPE = anyelement
);
这是我的备份和恢复命令:
C:\Program Files (x86)\PostgreSQL\9.3\bin\pg_dump.exe" --host localhost
--port 5432 --username "postgres" --no-password --verbose -F t
--file "C:\Archives\mydatabase.tar" "mydatabase"
C:\Program Files (x86)\PostgreSQL\9.3\bin\pg_restore.exe" -i -h localhost
-p 5432 -U "postgres" -d "mydatabase" -v "C:\Archives\mydatabase.tar"
目前我没有任何损坏,但问题如何在涉及自定义功能时进行备份和恢复?它们也可以与数据一起传输吗?或者必须从备份中排除?如何改进显示备份和恢复命令,这些过程如前所述顺利和正确?
答案 0 :(得分:1)
可能有两种解释。
首先,您可能正在将备份还原到非空的数据库中,实际上已经包含这些功能(尽管不能保证它们的定义相同!) - 根据马的评论。您可以使用pg_restore的--clean选项来删除此类定义。您还可以添加--create选项,以便它可以删除然后重新创建整个数据库。
另一种可能性是你在template1数据库中定义了这些函数。该数据库中定义的任何内容都将复制到您创建的任何新数据库中。在这种情况下,最好在恢复之前从template1中删除这些定义。