【问题标题】:Postgres drop database in rails app with rake commandPostgres 使用 rake 命令在 Rails 应用程序中删除数据库
【发布时间】:2012-11-24 01:00:49
【问题描述】:

我在为 Rails 应用程序删除 postgres 数据库时遇到问题 - 最近在部署到 heroku 后从 sqlite 切换。运行我的 rake 任务以聚合数据并填充数据库时, rake db:create db:migrate all 工作,但 db:drop 不工作。运行 rake db:drop db:migrate db:create all 后,我的终端出现以下错误。 'all' 是聚合器的 rake 任务。

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文件...`

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 命令行的数据库列表:

                                         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)

编辑 - 在推动 heroku 之前,我正在尝试在开发中执行此操作。我需要为我的用户名添加访问权限吗?我尝试 GRANT UPDATE ON something_development TO username 但收到错误:关系“something_development”不存在。 Heroku 会记住这一点 - 谢谢。

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

【问题讨论】:

    标签: ruby-on-rails postgresql


    【解决方案1】:

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

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

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

    关于配置,您应该遵循以下几个步骤:

    安装 gem pg

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

    注意:当你将代码推送到 Heroku 时,Heroku 会根据他们的 PG 服务器信息自动创建新的 database.yml,所以你不需要关心 Heroku 上的配置数据库。请记住在将您的应用推送到 Heroku 之前删除 sqlite gem

    【讨论】:

    • heroku 上没问题 - 一切正常。只是不使用 postgres 进行开发,据我了解,这很常见。感谢您的信息。
    【解决方案2】:

    在heroku上你没有删除数据库的权限,你必须这样做

    heroku pg:reset
    

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

    【讨论】:

    • 我正在尝试在开发中执行此操作,然后再推送到 heroku。我需要为我的用户名添加访问权限吗?我尝试 GRANT UPDATE ON something_development TO username 但收到错误:关系“something_development”不存在。 Heroku 会记住这一点 - 谢谢。
    • 为了在 postgresql 中创建数据库,我只需要 CREATE USER my_user;创建数据库 my_db 所有者 my_user; ALTER USER my_user WITH ENCRYPTED PASSWORD 'password'; ALTER ROLE my_user WITH CREATEDB;
    • 在执行此操作并在 psql 中列出数据库之后,我的用户名仍然没有显示在 something_development 的访问权限下。运行您建议的 CREATE 命令时,它表示它们已经存在。我还为 my_user 授予了 something_development 的访问权限,这会在列出 psql 中的所有数据库时显示。
    【解决方案3】:

    找出问题所在 - 事实证明您无法重命名数据库“postgres”,因为它需要它来管理数据库。我曾尝试将 postgres 重命名为 something_development。为了解决这个问题,我创建了一个 postgres 数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-02
      • 2013-11-17
      • 2016-09-14
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 2013-06-15
      • 1970-01-01
      相关资源
      最近更新 更多