带有 -B 选项的 pg_dump 行为

问题描述 投票:0回答:1

最近,我们不得不将 postgres 数据库从一个云提供商转储并恢复到另一个云提供商。我们为此使用了 pg_dump,下面是命令。

pg_dump -F t -h HOST -U USER -d DB -f C:\Users\Shariq\Downloads\Prod-DB\noblobswithschema.tar -Z0 -v -B

生成转储文件只花了不到 10 分钟,我们就可以使用 pg_restore 导入它,没有任何问题。根据 documentation -B 选项用于从转储中排除大对象。

下面我添加更多细节,

  1. 数据库大小为 128 GB(基于
    pg_database_size
    ),但整个表大小约为 2 GB。根据我们数据库中的信息,2 GB 是有效的。我们运行 VACUUM 标准命令,这对数据库大小没有任何影响。不过我们没有运行 VACUUM FULL。
  2. 整个数据库中没有
    bytea
    列可以称为大对象。我认为有些
    text
    列也可以作为大型对象包含在内,但我不确定。

现在的问题是

-B
中没有
pg_dump
标志,转储数据库需要很长时间,而且转储大小高达 300 GB。我尝试过不同的标志,例如用于基于目录的备份的
-j
,这也需要很长时间。由于我们没有任何数据类型为
bytea
的列,因此我们使用
-B
选项,假设其他
text
数据类型不被视为大对象。我们的恢复包含所有数据,包括
text
列。我不知道为什么在没有
pg_dump
标志的情况下
-B
会花很长时间。如果有人可以阐明这一点。

postgresql pg-dump pg-restore
1个回答
0
投票

你毕竟没有使用

bytea
,你使用的是大对象。正如您所发现的,这是一个坏主意。如果您有足够大的对象,您将无法再转储或升级数据库,请参阅此处此处。 目前还没有已知的补救措施。摆脱大型物体!

© www.soinside.com 2019 - 2024. All rights reserved.