gpt4 book ai didi

postgresql - PostgreSQL 中 TOAST 表的大小限制是多少? 40 亿行或 40 亿个 chunk_id 值?

转载 作者:行者123 更新时间:2023-12-03 20:27:15 25 4
gpt4 key购买 nike

在与 TOASTed 表( https://wiki.postgresql.org/wiki/TOAST )相关的 PostgreSQL wiki 中说:

“在一个表中不能有超过 2^32(40 亿)个外部值,因为在它的 TOAST 表中必须有重复的 OID。”

这是什么意思?

1) TOAST 表不能超过 40 亿行?或者

2) TOAST 表不能有超过 40 亿个不同的 OID 值(列 chunk_id 的值)?

我们有一个包含 32 亿行的 toast 表,想知道我们是否接近极限。

提前致谢

最佳答案

TOAST 表定义如下:

\d pg_toast.pg_toast_59238
TOAST table "pg_toast.pg_toast_59238"
Column | Type
------------+---------
chunk_id | oid
chunk_seq | integer
chunk_data | bytea

这里 chunk_id是单个烘烤值的标识符, chunk_seq是 toasted 值被拆分成的部分的索引。

由于只有大约 40 亿个不同的无符号 4 字节整数,这就是数据类型 oid也就是说,每个数据库表中只能有 40 亿条烤数据。

然而,并不是表中的每个条目都被烘烤:只有当表行的大小在压缩后超过 2000 字节时,值才会存储在行外。

您可以为您的餐 table 资助 TOAST 餐 table :
SELECT reltoastrelid
FROM pg_class
WHERE relname = 'mytable';

然后你可以找到有多少烤条目:
SELECT count(DISTINCT chunk_id)
FROM pg_toast.pg_toast_12345;

警告:这是一个昂贵的查询。

关于postgresql - PostgreSQL 中 TOAST 表的大小限制是多少? 40 亿行或 40 亿个 chunk_id 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60776204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com