如何在Postgres oid列中插入二进制数据

时间:2016-04-07 11:56:20

标签: postgresql

我有以下查询

 INSERT INTO SESSIONINFO(ID, LASTMODIFICATIONDATE, RULESBYTEARRAY, STARTDATE) VALUES 
(1, NULL, '\xaced0005774d0a060805100418005243080010001a3918002000320608011000180042121a080a044d41494e100022060a044d41494e52090a0744454641554c545a0c0a0a0805320608001000180122026800')

当我尝试执行上述语句时出现以下错误

ERROR: invalid input syntax for type oid: "\xaced0005774d0a060805100418005243080010001a3918002000320608011000180042121a080a044d41494e100022060a044d41494e52090a0744454641554c545a0c0a0a0805320608001000180122026800"

如何解决这个问题..

1 个答案:

答案 0 :(得分:1)

我认为你混淆了oidbytea

bytea用于连续的二进制数据。您的RULESBYTEARRAY列几乎肯定会以bytea为其类型。请参阅手册中的binary data types

oid列类型是一个简单的32位无符号整数。 PostgreSQL使用它来引用系统表和各种其他东西。其中一个用途是引用pg_largeobject表中的行,这些行可用于存储类似文件的对象。

如果要存储和检索二进制数据,几乎肯定要使用bytea - 类型字段,而不是pg_largeobjectpg_largobject适用于您想要读取和修改的非常非常大的数据和/或数据,而无需每次都加载整个批次,并在您更改任何内容时将其全部写回。