最近,我们不得不将 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 选项用于从转储中排除大对象。
下面我添加更多细节,
pg_database_size
),但整个表大小约为 2 GB。根据我们数据库中的信息,2 GB 是有效的。我们运行 VACUUM 标准命令,这对数据库大小没有任何影响。不过我们没有运行 VACUUM FULL。bytea
列可以称为大对象。我认为有些 text
列也可以作为大型对象包含在内,但我不确定。现在的问题是
-B
中没有 pg_dump
标志,转储数据库需要很长时间,而且转储大小高达 300 GB。我尝试过不同的标志,例如用于基于目录的备份的-j
,这也需要很长时间。由于我们没有任何数据类型为 bytea
的列,因此我们使用 -B
选项,假设其他 text
数据类型不被视为大对象。我们的恢复包含所有数据,包括 text
列。我不知道为什么在没有 pg_dump
标志的情况下 -B
会花很长时间。如果有人可以阐明这一点。