转储postgres DB rails

时间:2018-06-14 07:29:44

标签: ruby-on-rails postgresql

有很多关于如何转储数据库以便将其转移到生产中的信息,但似乎没有提到数据库的用户名应该是什么。

这是来自Heroku,但我无法找到用户名...

PGPASSWORD=mypassword pg_dump -Fc --no-acl --no-owner -h localhost -U myuser mydb mydb.dump

这是我在Github上找到的rake任务

 desc "Dumps the database to db/APP_NAME.dump"
  task :dump => :environment do
    cmd = nil
    with_config do |app, host, db, user|
      cmd = "pg_dump --host #{host} --username #{user} --verbose --clean --no-owner --no-acl --format=c #{db} > #{Rails.root}/db/#{app}.dump"
    end
    puts cmd
    exec cmd
  end

  def with_config
    yield Rails.application.class.parent_name.underscore,
      ActiveRecord::Base.connection_config[:host],
      ActiveRecord::Base.connection_config[:database],
      ActiveRecord::Base.connection_config[:username]
  end

它生成以下命令,并显示以下错误。

pg_dump --host --username --verbose --clean --no-owner --no-acl --format=c kelp_development > /home/yiti/code/ymagoon/kelp/db/kelp.dump

pg_dump: [archiver (db)] connection to database "kelp_development" failed: could not translate host name "--username" to address: Name or service not known

2 个答案:

答案 0 :(得分:0)

您可以在Heroku信息中心找到有关postgres数据库的详细信息:

  1. 打开Heroku信息中心
  2. 选择您的申请
  3. 在标签'概述'上,点击' Heroku Postgres',打开一个新的浏览器窗口。
  4. 在新的浏览器窗口中,选择标签'设置'
  5. 点击'查看凭据...'
  6. 您的数据库设置全部列在此处
  7. 请勿忘记此页面上的警告:请注意,这些凭据不是永久性的。

答案 1 :(得分:0)

根据共享的描述和代码,您似乎没有指定主机,数据库和用户名。

下面提到的命令显示它没有从rake任务中定义的with_config方法中获取配置。

pg_dump --host  --username  --verbose --clean --no-owner --no-acl --format=c kelp_development > /home/yiti/code/ymagoon/kelp/db/kelp.dump

您可以使用下面提到的代码

创建配置对象
config   = Rails::Configuration.new
host     = config.database_configuration[RAILS_ENV]["host"]
database = config.database_configuration[RAILS_ENV]["database"]

从DATABASE_URL获取数据库凭据     方案://用户名:密码@主机:端口/数据库

现在您可以直接从下面提到的commmad中将数据转储到postgres数据库:

pg_dump -h host_name -U user_name --verbose --clean --no-owner --no-acl --format=c db_name > path_to_dump_file.dump