pg_restore输入文件似乎是文本格式的转储。请使用psql

时间:2018-06-19 15:02:13

标签: postgresql ansible psql

我有一个Ansible任务,它将在PostgreSQL数据库中加载db dump文件。

name: Apply prod dump file
  become_user: postgres
  shell: "PGPASSWORD={{ db_password }} psql -h localhost -d {{ db_name }} -U {{ db_user }} -f {{ server_path }}/dump.sql"
  when: run_db_restore is defined and run_db_restore
  tags: django.restore

问题在于转储文件包含CREATE ROLE和CREATE DATABASE部分,我不想这样做,因为它会覆盖我用Ansible创建的过程,所以我想执行

pg_restore --no-owner --data-only

在sql文件上,因此我只能创建表和导入数据。问题是如何解决

psql -h localhost -d {{ db_name }} -U {{ db_user }} -f {{ server_path }}/dump.sql

所以我可以在数据库中正确导入数据。

此功能 pg_restore --no-owner --data-only -U admin -d database dump.sql正在显示我

pg_restore: [archiver] input file appears to be a text format dump. Please use psql.

1 个答案:

答案 0 :(得分:2)

除非先编辑SQL文件,否则您将无法执行此操作,这是一项具有挑战性且容易出错的任务,需要自动执行。

我建议您更改过程并改用自定义格式转储。然后,您可以使用pg_restore还原它们,而仅还原所需的部分。

由于您说转储中有用户,因此看来您是用pg_dumpall创建的。如果您不想在那里有用户,请不要这样做。

相关问题