在 Postgres 10 中快速生成 100 GB 的 Postgres 关系

Generate a 100 GB Postgres relation quickly in Postgres 10

我正在尝试快速生成 100 GB 的 postgres table。我需要这种关系来预热缓冲区缓存。我试过使用 bytea 和文本字段。这使实际关系保持较小和较大的 TOAST table。棘手的部分是由于权限问题无法将 TOAST table 加载到缓存中。我想知道是否有人有过快速创建这么大 table 的经验?

我不知道这是否是绝对最快的,但这应该是相当不错的:

create unlogged table j (x text);
alter table j alter x set storage plain ;
insert into j select repeat('a',4100) from generate_series(1,13107200);

像这样设置存储子句将禁用 TOAST,包括外联存储和内联压缩。将其取消记录将阻止它流式传输到任何副本或 WAL 存档。将其大小设置为超过半页可确保每页仅写入一行。它仍然会消耗主服务器上的存储空间,但我认为托管服务没有任何解决方法。

您可能想用 COPY FREEZE 填充它以避免需要清理,但我认为您无法让它在托管服务上正常工作。