【问题标题】:oid and bytea are creating system in tablesoid 和 bytea 在表中创建系统
【发布时间】:2021-11-24 17:55:07
【问题描述】:

oid -> 创建一个表 pg_largeobjects 并在其中存储数据
bytea -> 如果压缩后的数据仍然超过 2000 字节,PostgreSQL 会将可变长度数据类型拆分为块,并根据https://www.cybertec-postgresql.com/en/binary-data-performance-in-postgresql/ 将它们不合规地存储在一个特殊的“TOAST 表”中

我不想要任何其他表来存储大数据我想将它们存储在我定义的表的列中,这可能吗?

【问题讨论】:

  • "这可能吗?" - 如果您想在单列中存储更多 2K 数据,则不能
  • 您所写的只是在后台发生的 Postgresql 内务管理。在 SQL 级别上,您可以根据需要“将它们存储在我定义的表中的列中”。

标签: postgresql oid bytea


【解决方案1】:

最好避免使用大物体。

使用bytea,您可以通过更改列定义来防止 PostgreSQL 在 TOAST 表中存储数据,例如

ALTER TABLE tab ALTER col SET STORAGE MAIN;

然后 PostgreSQL 将压缩该列但将其保留在主表中。

由于 PostgreSQL 中的块大小为 8kB,并且一行始终存储在单个块中,这会将表行的大小限制在略低于 8kB(存在块头和其他开销)。

我认为您正在尝试解决一个非问题,而您存储大量数据的要求是不合理的。

【讨论】:

    猜你喜欢
    • 2011-06-29
    • 2015-06-08
    • 2012-05-01
    • 2011-08-03
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    相关资源
    最近更新 更多