rake db:structure:在PostgreSQL / Rails 3.2下转储失败

时间:2012-04-20 15:14:42

标签: ruby-on-rails postgresql rake ruby-on-rails-3.2

我收到此错误消息:

pg_dump: too many command-line arguments (first is "demo_db")
Try "pg_dump --help" for more information.
rake aborted!
Error dumping database

Tasks: TOP => db:structure:dump
(See full trace by running task with --trace)

这曾经在Rails 3.1下工作。我正在使用Rails 3.2.3和PostgreSQL 9.0.5。其他任务如db:migrate或db:rollback工作得很好。

4 个答案:

答案 0 :(得分:7)

pg_dump命令在activerecord/lib/active_record/railties/databases.rake at line 428中执行。

`pg_dump -i -s -x -O -f #{Shellwords.escape(filename)} #{search_path} #{Shellwords.escape(config['database'])}`

尝试在那里设置断点并查看正在运行的实际命令。

所有这些选项对Pg9.0.x都有效,所以我怀疑abcs[Rails.env]['schema_search_path']中有一些有趣的东西会混淆psql的选项解析。请注意search_path构造不引用--schema参数,因此具有嵌入空间的search_path_part将解析为部分模式名称,后跟一个前面没有选项的单词,因此psql会将其解释为数据库名称,然后在稍后获取真实数据库名称时进行抱怨。

答案 1 :(得分:5)

感谢dbenhur,我发现了这个问题。我的文件名路径中有一个空格。 将activerecord/lib/active_record/railties/databases.rake的第392行更改为

pg_dump -i -s -x -O -f '#{filename}' #{search_path} #{abcs[Rails.env]['database']}

(在#{filename}附近添加单引号)可以解决问题。

答案 2 :(得分:1)

我遇到了db:structure:在我的设置上转储的问题。 Rails 3.2.11 + JRuby 1.7.1 [1.8模式] Postgresql 9.1.7。

唯一真正有用的是将activerecord_jdbc_adapter从版本1.2.5降级到1.2.2。

gem 'activerecord-jdbc-adapter', '1.2.2'
gem "activerecord-jdbcpostgresql-adapter", '1.2.2'

希望它会对任何人有所帮助。

答案 3 :(得分:0)

我通过创建一个以postgresql作为数据库(rails new MyApp -d postgresql)的新应用程序修复了这个(黑暗)问题,然后将我所有的旧应用程序文件(/ app文件夹,迁移和一些/配置文件)移动到新的一。现在当我运行rake db:migrate时,没有pg_dump错误。我希望这有助于某人。