现在我正在开发一个应用程序,它使用hibernate + postgresql来持久化数据。我们需要存储多个可序列化的HashMaps,因此LOB(oid)被用于此目的。但由于postgresql中oid删除的一些问题,我们决定将这些数据存储为bytea而不是oid。所以问题是如何在保留旧数据的情况下将列类型从oid改为bytea?如果有人能提供一个适用于这种数据转换的工作脚本/解决方案,那就太好了。
谢谢您提前。
谢谢您提前。
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
对于可序列化哈希映射,lobs可能不是正确的解决方案,除非您需要使用偏移量进行查找。Bytea更加干净。问题在于,您可能需要一些停机时间来切换事物。
我可能会创建一个新列并将数据复制过去,然后取消链接,最后删除旧列。然后运行适当的vacuum作业。
lo
中的lo_manage
触发器一起,这种管理应该在原始事务本身中发生 - 至少大部分时间是如此。当然,仅使用vacuumlo
是不够的。 - A.H.