【问题标题】:Postgres ERROR: permission denied for tablePostgres 错误:表的权限被拒绝
【发布时间】:2020-08-06 06:39:01
【问题描述】:

我有一个使用 pg_dump 从远程数据库生成的转储文件。我正在使用该文件使用 psql 恢复和填充数据库。 我没有用户名和数据库名。我查看了 sql 文件并找出了用户和数据库。 这是我的步骤: 1. psql -h -u -d (我在这里使用了超级用户)。 2.创建用户,因为应用程序只需要使用这个用户访问。 3.使用Pgadmin将数据库的所有者更改为步骤2中创建的用户。

我无法访问任何表并收到错误 - 错误:表的权限被拒绝

请帮忙!

谢谢

【问题讨论】:

    标签: postgresql psql rds pg-dump


    【解决方案1】:

    最好使用 dump 和 restore 而不是 psql 来恢复数据库。 例如

    例如,假设您在 remoteDB 中有数据库 dbname_source,在 localDB 中有 dbname_target,那么您可以使用以下命令进行转储和恢复

    ./pg_dump -U postgres -p 5432 -h <remote_IP> -Ft dbname_source > dump_of_source.sql.tar 
    ./pg_restore -U postgres -h localhost -p 5432 -d dbname_target dump_of_source.sql.tar
    

    【讨论】:

    • 我无法控制他们生成转储的过程。我得到的只是一个 .sql 文件。窥视文件,我试图找到数据库名称和所有者。然后我创建用户和数据库,最后使用 PSQL 导入。我昨天错过了所有者,后来当我添加所有者时,我开始收到上述错误。如果您能为我的方案提出解决方案,我将不胜感激。谢谢!
    • 不要创建任何用户,让脚本来做。只需创建一个与 sql 文件中的数据库不同的数据库,例如 localdb。然后执行以下命令 ./psql -U postgres -h localhost -p 5432 -d localdb -f mydumpfile.sql
    • @Amjad Shahzad 只是澄清一下,说我的数据库名称是 dvd,拥有的用户是 alex(源代码中)。以下可能是命令:./pg_dump -U alex -p 5432 -h &lt;remote_IP&gt; -Ft dvd&gt; dvd.sql.tar ./pg_restore -U postgres -h localhost -p 5432 -d dbname_target dump_of_source.sql.tar OR ./psql -U postgres -h remote-host -p 5432 -d dvd -f dvd.sql。我真的不需要 alex 用户我应该使用 postgres 用户。请确认谢谢!
    • 最好使用超级用户 postgres,它也会照顾用户 alex。所以./pg_dump -U postgres -p 5432 -h &lt;remote_IP&gt; -Ft dvd &gt; dvd.sql.tar 用于转储和恢复./pg_restore -U postgres -h localhost -p 5432 -d dbname_target dvd.sql.tar 因此,在恢复时,所有连接信息都将是您要在其上恢复转储的目标 dbms。假设您要将数据库 dvd 的转储还原为本地数据库名称 dbname_target。
    猜你喜欢
    • 2022-08-18
    • 1970-01-01
    • 2021-11-08
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 2015-09-16
    • 2012-02-11
    相关资源
    最近更新 更多