代码之家  ›  专栏  ›  技术社区  ›  copser

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

  •  1
  • copser  · 技术社区  · 7 年前

    我有一个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
    

    问题是,转储文件包含创建角色和创建数据库部分,而我不想这样做,因为它会覆盖我用ANFILE创建的进程,所以我想预处理。

    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 回复  |  直到 7 年前
        1
  •  2
  •   Laurenz Albe    7 年前

    除非您先编辑SQL文件,否则这是无法做到的,这是一个具有挑战性且容易出错的任务。

    我建议您更改过程,而不是使用自定义格式转储。然后你可以用 pg_restore 只恢复你需要的部分。

    既然您说转储中有用户,那么似乎是用 pg_dumpall . 如果你不想有用户在里面,就不要这么做。