我正在尝试使用'psql -U username -W dbname<导入到PostgreSQL中的模式转储迁移/ schema.psql',部分导入Schema,但控制台抛出错误,如“ERROR:关闭table_name的权限被拒绝”和“ERROR:relation table_name不存在”。
我已经创建了这样的数据库:“createdb -O username dbname”
只能导入7个表,只需导入其中的3个就会中断。
任何人都有提示,该怎么办?
答案 0 :(得分:3)
如果备份采用“自定义”格式(-Fc),则可以改为使用pg_restore,以便告诉它不应用所有权更改:
pg_restore -U username -W --no-owner --dbname=dbname migrations/schema.psql
所有对象都将以“username”作为所有者创建。
除此之外,尝试将ALTER OWNER和SET SESSION AUTHORIZATION命令压缩到新文件中(或通过管道将grep输出发送到psql)。这些命令应该始终以纯文本输出格式在一行上。
答案 1 :(得分:2)
有时这种问题是由区分大小写的问题引起的。 PostgreSQL折叠为小写所有未加引号的标识符;如果使用包含大写字母的带引号的名称创建表,则以后不引用名称的命令可能无法找到该表。
权限错误可能与同一事物有关,也可能完全不同。很难说没有看到失败的命令。
答案 2 :(得分:0)
当我在我的网站上工作时,我一直都会遇到这个错误,因为我将创建一个像我这样的表,这个表需要稍后连接的Apache / PHP用户访问。
有一个名为pg_class的表定义了您的表。这包括一个名为relowner的列。使用正确的数字更改它将为您提供正确的所有权。
我在此页面上有详细信息:
http://linux.m2osw.com/table_owner_in_postgresql
ALTER OWNER ...可能是一个更好的解决方案,可以做同样的事情,虽然在旧版本的PostgreSQL中它确实存在不!