psql错误:关系已经存在

Ton*_*Han 5 postgresql capistrano ruby-on-rails

我正在使用postgres编写一个rails项目,服务器中有一些数据.我想把数据从远端转储到本地,所以我写脚本来做,但是出现了一些错误.

这是转储脚本:

run "PGPASSWORD='#{remote_settings['password']}' 
pg_dump -U #{remote_settings["username"]} #{"-h '#{remote_settings["host"]}'" 
if remote_settings["host"]} 
'#{remote_settings["database"]}' > #{remote_sql_file_path}"
Run Code Online (Sandbox Code Playgroud)

有一些代码要运输..

Transport codes
Run Code Online (Sandbox Code Playgroud)

这是恢复脚本:

run_locally "PGPASSWORD='#{local_settings['password']}' psql -U 
#{local_settings["username"]} -d #{local_settings["database"]} 
-f #{local_sql_file_path}"
Run Code Online (Sandbox Code Playgroud)

我成功获取了数据文件,但是当运行**restore脚本时出现了一些错误*:

psql:tmp/production-ib5k_production-2013-02-21_18:42:09.sql:46: ERROR:  relation        "refinery_images" already exists
psql:tmp/production-ib5k_production-2013-02-21_18:42:09.sql:49: ERROR:  role "ib5k" does not exist
psql:tmp/production-ib5k_production-2013-02-21_18:42:09.sql:60: ERROR:  relation "refinery_images_id_seq" already exists
psql:tmp/production-ib5k_production-2013-02-21_18:42:09.sql:63: ERROR:  role "ib5k" does not exist
psql:tmp/production-ib5k_production-2013-02-21_18:42:09.sql:83: ERROR:  relation "refinery_page_part_translations" already exists
psql:tmp/production-ib5k_production-2013-02-21_18:42:09.sql:86: ERROR:  role "ib5k" does not exist
...
sql:tmp/production-ib5k_production-2013-02-21_18:42:09.sql:525: ERROR:  duplicate key  value violates unique constraint "refinery_images_pkey"
DETAIL:  Key (id)=(1) already exists.
CONTEXT:  COPY refinery_images, line 2: ""
psql:tmp/production-ib5k_production-2013-02-21_18:42:09.sql:547: ERROR:  duplicate key value violates unique constraint "refinery_page_part_translations_pkey"
DETAIL:  Key (id)=(1) already exists.
CONTEXT:  COPY refinery_page_part_translations, line 8: ""
psql:tmp/production-ib5k_production-2013-02-21_18:42:09.sql:569: ERROR:  duplicate key value violates unique constraint "refinery_page_parts_pkey"
DETAIL:  Key (id)=(1) already exists.
CONTEXT:  COPY refinery_page_parts, line 8: ""
...
Run Code Online (Sandbox Code Playgroud)

并且本地的数据库不会更新.我想知道如何解决它?添加一些参数?先感谢您.

Mik*_*ll' 10

您可以使用pg_dump-c--clean参数.该参数将在运行命令之前删除现有数据库对象以创建它们.

另一种方法是在恢复之前自己删除这些对象.(可能使用drop schemadrop database.)

谨慎使用.

  • 这个选项在`pg_dump`中起什么作用?我希望该选项被传递给“pg_restore”。 (4认同)