Chinaunix

标题: pg_restore 恢复正确,但仍出现错误的信息 [打印本页]

作者: runnerterry    时间: 2011-06-27 16:10
标题: pg_restore 恢复正确,但仍出现错误的信息
postgreSQL 9.0

tempDB 为数据库名
usr_mgr 为用户名

1. 先用pg_dump --file=/home/sdr/backup/anotherDB.bak --format=t --username=usr_mgr --no-privileges tempDB 的shell命令导出数据库tempDB
2. 然后dropdb -U usr_mgr tempDB 删除整个数据库
3. 再用createdb -U usr_mgr tempDB 创建一个空数据库(默认用了template1)
4. 最后pg_restore  --verbose --username=usr_mgr --dbname=tempDB --format=t /home/sdr/backup/anotherDB.bak 恢复数据库

导入数据是无误的(完全能导入,并且数据正确)
但提示如下错误信息:
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 309; 2612 11574 PROCEDURAL LANGUAGE plpgsql postgres
pg_restore: [archiver (db)] could not execute query: ERROR:  must be owner of language plpgsql
    Command was:
CREATE OR REPLACE PROCEDURAL LANGUAGE plpgsql;

在网上查询,得知在创建数据库的时候,默认以template1为模板创建,并且默认安装了plpgsql的过程语言,而usr_mgr无权限去执行此过程语言。
请问大家该怎么来解决这个问题?
PS:我初学数据库,首次接触postgreSQL,请大家教教我,谢了!
作者: runnerterry    时间: 2011-06-27 16:55
怎么大家都不给个解决办法啊!

就是怎么把 usr_mgr 转换成 plpgsql 的 owner 啊?
作者: renxiao2003    时间: 2011-06-27 22:38
是不是用户创建得不对啊。
作者: trainee    时间: 2011-06-28 08:46
应该加一个语句
GRANT  ALL    ON LANGUAGE plpgsql    TO  usr_mgr

不过你这个错误可以忽略, 因为你的数据库已经加了plpgsql, 所以CREATE OR REPLACE PROCEDURAL LANGUAGE plpgsql这条语句是多余的,即使错误也无碍.
作者: tanfeng3    时间: 2011-06-28 09:03
这个错误可以忽略。因为9版本以上,在创建库时已经默认创建了 plpgsql 语言
作者: renxiao2003    时间: 2011-06-28 12:25
PG支持好几种语言创建存储过程。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2