2010-10-21 185 views
2

我已经设置了一个系统,以自动下载并存储从我的Heroku部署的导轨应用程序的数据库转储。一切是伟大的工作,但是当我下载的转储和恢复它到我的本地Postgres的服务器,然后尝试运行我的本地应用程序关闭该恢复的数据库我得到这个错误错误恢复postgres数据库备份

ActiveRecord::StatementInvalid in HomeController#index 

PGError: ERROR: permission denied for relation users : SELECT  "users".* FROM  "users" WHERE  ("users"."id" = 1) LIMIT 1 

任何人有什么,可能是有什么建议?我检查了我的postgres权限,所有表和数据库本身都属于postgres用户。我试过GRANT ALL也没有成功。

+0

您应该在您的问题中包含用于执行还原的命令。 – Ritchie 2012-06-08 02:41:20

回答

2

通过你的pgdump.sql文件并删除这样说每个CREATE TABLE语句后线:

ALTER TABLE public.users OWNER TO eqrunyvndu; 

然后运行从您的还原,它应该工作。这些行将表的所有者更改为您的heroku应用程序的自动生成的数据库用户名,这在本地无意义,因此您可以将其删除。

我还建议您对该用户名的任何其他事件进行grep并将其删除。

+0

'$ grep -v“OWNER TO”pgdump.sql> pgdump-local.sql' – wuputah 2010-10-22 04:42:20

+0

嗯,我没有任何'ALTER TABLE public.users所有者到eqrunyvndu;'的所有发生,或者甚至只有一次'OWNER '在我的转储文件中... – erskingardner 2010-10-25 08:07:04

+0

听起来像是你的Postgres服务器设置的问题,然后......你知道生成了'eqrunyvndu',对不对?这对你的应用程序会有所不同。 – tfe 2010-10-25 18:02:12

0

很可能您正在使用的PostgreSQL用户与此表的所有者不同。 我想你在这个数据库和这个数据库上有不同的用户?

+0

我的postgres服务器设置中只有一个用户:postgres。你的意思是说我得到转储数据库的用户有不同的用户?我不确定我在追随。 – erskingardner 2010-10-21 16:41:44

+0

你确定你连接到正确的数据库吗? – 2010-10-21 17:38:05

+0

你有什么在postgresql日志中拒绝这个权限? – 2010-10-21 17:38:29