我正在尝试改变一个bytea
具有类型的列oid
并仍然保留价值观。
我尝试过使用如下查询:
ALTER TABLE mytable ADD COLUMN mycol_tmp oid;
UPDATE mytable SET mycol_tmp = CAST(mycol as oid);
ALTER TABLE mytable DROP COLUMN mycol;
ALTER TABLE mytable RENAME mycol_tmp TO mycol;
但这只是给了我错误:
ERROR: cannot cast type bytea to oid
有什么办法可以实现我想要的吗?
Oid 类型的列只是对实际存储在系统中的二进制内容的引用pg_largeobject桌子。在存储方面,一个Oid是一个4字节的整数。
另一方面,类型为 bytea 的列is实际内容。
要将字节传输到大对象,应使用大对象的类似文件的 API 创建一个新的大对象:lo_create() 获取新的 OID,然后在写入模式下使用 lo_open(),然后使用 lo_write() 写入或lowrite(),然后是 lo_close()。
仅通过演员阵容无法合理地完成此任务。
基本上,您需要用您选择的语言(至少一种支持大对象 API 的语言,包括 plpgsql)编写大约 10 行代码才能执行此转换。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)