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

3

I have following query

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

当我尝试执行上述语句时,出现以下错误。
ERROR: invalid input syntax for type oid: "\xaced0005774d0a060805100418005243080010001a3918002000320608011000180042121a080a044d41494e100022060a044d41494e52090a0744454641554c545a0c0a0a0805320608001000180122026800"

如何解决这个问题...
2个回答

1

要插入类型为oid的列,您可以使用lo_from_bytea函数:

创建一个大对象并将数据存储在其中,返回其OID。传递0以使系统选择OID。

因此,在您的示例中:

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

1
我认为你混淆了oidbyteabytea用于行中的二进制数据。你的RULESBYTEARRAY列几乎肯定应该使用bytea作为其类型。请参见手册中的二进制数据类型oid列类型是一个简单的32位无符号整数。它被PostgreSQL用来引用系统表和各种其他东西。其中一种用途是引用pg_largeobject表中的行,该表可用于存储类似文件的对象。
如果您想存储和检索二进制数据,几乎肯定要使用bytea类型的字段,而不是pg_largeobjectpg_largobject旨在用于非常大的数据和/或您希望在不必每次加载整个数据并在更改任何内容时将其全部写回的情况下读取和修改数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接