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



我收到此错误消息:

pg_dump:命令行参数太多(第一个是"demo_db")尝试"pg_dump --help"以获取更多信息。耙子中止了!转储数据库时出错任务:顶部 => db:结构:转储(通过使用 --trace 运行任务来查看完整跟踪)

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

pg_dump 命令在 activerecord/lib/active_record/railties/databases.rake 的第 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 会将其解释为数据库名称,然后在稍后到达实际数据库名称时进行抱怨。

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

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

(在#{filename} )两边添加单引号可解决此问题。

我在设置上遇到了 db:structure:dump 的类似问题。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'

希望它能帮助任何人。

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

最新更新