4

I get this error message:

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)

This used to work under Rails 3.1. I'm using Rails 3.2.3 and PostgreSQL 9.0.5. Other tasks like db:migrate or db:rollback work just fine.

2
  • see answer here: stackoverflow.com/a/13733565/168143 Commented Dec 5, 2012 at 22:41
  • John, thanks but my problem was different. See my accepted solution. Commented Dec 6, 2012 at 8:41

4 Answers 4

7

The pg_dump command is executed in 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'])}`

Try setting a breakpoint there and seeing what actual command is being run.

All those options are valid for Pg9.0.x, so I suspect there's something funny in abcs[Rails.env]['schema_search_path'] which confuses psql's option parsing. Note the search_path construction doesn't quote the --schema argument, so a search_path_part with an embedded space will parse as a partial schema name followed by a word which isn't preceded by an option, so psql will interpret it as a database name, then complain when it gets to the real database name later.

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks, using this technique I found the bug (missing single quotes around the filename). See my response.
5

Thanks to dbenhur I found the issue. I have a space in the path of my filename. Changing line 392 of activerecord/lib/active_record/railties/databases.rake to

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

(adding the single quotes around #{filename}) fixes the issue.

2 Comments

@KonstantinGredeskoul the latest source uses Shellwords.escape on the filename and database name, (but, curiously, not the search_path); so it's much better now. Though really using Open3::capture2 with array args is generally safer than Kernel::`
Thanks, I did research for given string. And for me it doesn't work because PATH in spring's environment did not contain path to pg_dump.
1

I had a simillar problem with db:structure:dump on my setup. Rails 3.2.11 + JRuby 1.7.1[1.8 mode] Postgresql 9.1.7.

The only thing which really helped was downgrading activerecord_jdbc_adapter from version 1.2.5 to 1.2.2.

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

Hope it will help anybody.

Comments

0

I fixed this (dark) issue by creating a new app with postgresql as database (rails new MyApp -d postgresql), and then move all my old app files (/app folder, migrations, and some /config files) to new one. Now when I run rake db:migrate, there are no pg_dump error. I hope this helps someone.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.