关于postgresql:使用rake命令在rails app中删除Postgres数据库

Postgres drop database in rails app with rake command

我无法删除我的postgres数据库for rails app - 最近从部署到heroku后从sqlite切换。在运行我的rake任务来聚合数据并填充数据库时,rake db:create db:migrate all工作,但db:drop不起作用。运行rake db后,我在终端中收到以下错误:drop db:migrate db:create all。 'all'是聚合器的rake任务。

1
2
3
4
5
6
7
8
9
10
Couldn't drop something_development : #<PG::Error: FATAL:  database"postgres" does not exist
>
Couldn'
t DROP something_test : #<PG::Error: could NOT CONNECT TO server: No such file OR directory
    IS the server running locally AND accepting
connections ON Unix DOMAIN socket"/var/pgsql_socket/.s.PGSQL.5432"?
>
something_development already EXISTS
could NOT CONNECT TO server: No such file OR directory
IS the server running locally AND accepting
connections ON Unix DOMAIN socket"/var/pgsql_socket/.s.PGSQL.5432"?

'这是看看我的database.yml文件......`

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
development:
  adapter: postgresql
  host: localhost
  DATABASE: something_development

  username: username


test:
  adapter: postgresql
  DATABASE: something_test
 pool: 5
 timeout: 5000

production:
 adapter: postgresql
 host: localhost
 username: username
 DATABASE: something_production

这里还有psql命令行的数据库列表:

1
2
3
4
5
6
7
8
                                         List OF DATABASES
         Name         |      Owner      | Encoding | COLLATE | Ctype |          Access privileges          
----------------------+-----------------+----------+---------+-------+-------------------------------------
username              | username        | UTF8     | en_US   | en_US |
something_development | username        | UTF8     | en_US   | en_US |
template0             | username        | UTF8     | en_US   | en_US | =c/username+          |                 |          |         |       | username=CTc/username
template1             | username        | UTF8     | en_US   | en_US | =c/username    +      |                 |          |         |       | username=CTc/username
(4 ROWS)

编辑 - 我在开发之前尝试在开发中执行此操作。我是否需要为用户名添加访问权限?我尝试GRANT UPDATE ON something_development TO用户名但收到ERROR:关系"something_development"不存在。请记住,对于Heroku - 谢谢。

有没有人对可能发生的事情或某些可能指向正确方向的资源有任何想法?感谢任何帮助 - 谢谢。


首先,您应该确保在Heroku上使用哪种postgres DB:共享DB或Heroku Postgres。

如果您使用的是共享数据库(建议不要再使用),遗憾的是您必须删除Heroku应用并重新创建具有相同应用名称的新应用。

如果你正在使用Heroku PG,你可以在这里找到你的数据库:https://postgres.heroku.com/databases,然后销毁并添加另一个数据库,它就像删除并重新创建你的数据库,之后你就可以运行迁移了好。使用Heroku PG,我不确定我们是否可以运行db:drop now(已经有一段时间了,因为我在Heroku上无法使用此命令)

关于配置,您应该按照以下几个步骤:

安装宝石pg

使用pgAdmin III或类似的东西尝试连接到PG服务器。如果您成功,请将此信息用于database.yml文件。

注意:当您将代码推送到Heroku时,Heroku将根据其PG服务器信息自动创建新的database.yml,因此您无需关心Heroku上的配置数据库。记得在将应用程序推送到Heroku之前删除sqlite gem


找出问题 - 结果你不能重命名数据库"postgres",因为它需要管理数据库。我曾尝试将postgres重命名为something_development。为了解决这个问题,我创建了一个postgres数据库。


在heroku上,你没有drop database的权限,你必须这样做

1
heroku pg:reset

如果您的数据库不在heroku上,请检查(postrgesql)用户是否具有权限。