gpt4 book ai didi

postgresql - 将 PostgreSQL text/bytea 列迁移到大对象?

转载 作者:行者123 更新时间:2023-11-29 12:34:52 25 4
gpt4 key购买 nike

我有一个表(10k 行),它在 text 列中存储大值。当前最大的是 417 MB 未压缩(85 MB toasted)。这种设计的缺陷是不可能流式传输这些值(例如通过 JDBC)——任何使用此列的东西都必须将整个内容读入内存。

是否有任何工具或快捷方式可用于将此列迁移到大型对象?最大限度地减少所需的工作磁盘和内存。

如果有任何不同,我将使用 lo_compat_privileges

最佳答案

为什么不直接使用 lo_from_bytea

例子:

SELECT 'test'::text::bytea;
bytea
------------
\x74657374
(1 row)

SELECT lo_from_bytea(0, 'test'::text::bytea);
lo_from_bytea
---------------
274052
(1 row)

SELECT lo_get(274052);
lo_get
------------
\x74657374
(1 row)

因此,要实际移动(最好备份)数据从文本到 OID,您可以执行以下操作:

ALTER TABLE mytable ADD COLUMN value_lo OID;
UPDATE mytable SET value_lo = lo_from_bytea(0, value::bytea), value = NULL;
ALTER TABLE mytable DROP COLUMN value;
ALTER TABLE mytable RENAME COLUMN value_lo TO value;

...最后,由于 PostgreSQL 是一个 MVCC 数据库并且不会立即删除所有数据,您应该使用 VACUUM FULL 来清理数据或 CLUSTER .

关于postgresql - 将 PostgreSQL text/bytea 列迁移到大对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55006781/

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