Postgresql - 将列类型从oid更改为bytea并保留数据

时间:2012-07-30 16:25:58

标签: sql hibernate postgresql lob

现在我正在开发使用hibernate + postgresql来保存数据的应用程序。我们需要存储一些可序列化的HashMaps,因此LOB(oid)用于此目的。但是由于postgresql中删除oid的一些问题,我们决定将这些数据存储为bytea而不是oid。所以问题是,在保留旧数据的情况下,将列类型从oid更改为bytea的最佳方法是什么?如果有人可以为这样的数据转换提供工作脚本/解决方案,那就太棒了。

提前谢谢。

2 个答案:

答案 0 :(得分:1)

对于可序列化的哈希映射,lobs可能是错误的解决方案,除非您需要使用偏移进行搜索。 Bytea更清洁。问题是你可能需要一些停机时间才能切换。

我可能会做的是创建一个新列并复制数据,然后取消链接,然后删除旧列。然后运行适当的真空工作。

答案 1 :(得分:1)

我有同样的问题。所以我用创建缓冲列的四个请求做到了

ALTER TABLE attachment add column content_bytea bytea
UPDATE attachment SET content_bytea = lo_get(content)
ALTER TABLE attachment drop column content
ALTER TABLE attachment rename column content_bytea to content