pg_restore 忽略 -j 参数

pg_restore ignores -j parameter

我有一个相当大的数据库(15G+ 压缩)是这样创建的:

pg_dump wrwks_prod -Fc -f /path/to/file.dump

并像这样恢复到远程主机:

pg_restore --no-owner --clean --dbname=dbname --username=user --host=remote_host --port=port  -j 3 --v /path/to/file.dump

但是我查看远程机器时,只有一个进程使用一个内核创建索引,因此忽略了jobs参数。

这可能是什么原因?

使用 Postgres 9.2 的本地和远程机器 运行。

我假设您有一个巨大的 table 并且上面有一个巨大的索引,因此并行作业可以非常快速地恢复所有其余的小关系。在 table 完全恢复之前无法启动索引构建,因此它会等待。一旦 table 恢复,就会创建一个巨大的索引……当然这是一个假设…… 试试 运行 smth 这样的:

SELECT oid, row_estimate, total_bytes
    ,pg_size_pretty(total_bytes) AS total
    , pg_size_pretty(index_bytes) AS INDEX
    , pg_size_pretty(toast_bytes) AS toast
    , pg_size_pretty(table_bytes) AS tbl
  FROM (
  SELECT *, total_bytes-index_bytes-COALESCE(toast_bytes,0) AS table_bytes FROM (
      SELECT c.oid,nspname AS table_schema, relname AS TABLE_NAME
              , c.reltuples AS row_estimate
              , pg_total_relation_size(c.oid) AS total_bytes
              , pg_indexes_size(c.oid) AS index_bytes
              , pg_total_relation_size(reltoastrelid) AS toast_bytes
          FROM pg_class c
          LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
          WHERE relkind = 'r'
  ) a
) a
order by "total_bytes" desc
limit 10
;

确认或忽略假设