PostgreSQL抛出错误:“错误:关系table_name的权限被拒绝”

时间:2010-08-18 12:52:20

标签: postgresql import

我正在尝试使用'psql -U username -W dbname<导入到PostgreSQL中的模式转储迁移/ schema.psql',部分导入Schema,但控制台抛出错误,如“ERROR:关闭table_name的权限被拒绝”和“ERROR:relation table_name不存在”。

我已经创建了这样的数据库:“createdb -O username dbname”

只能导入7个表,只需导入其中的3个就会中断。

任何人都有提示,该怎么办?

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中它确实存在