sql - Postgres : How to store bytea as value in hstore?

标签 sql postgresql casting postgresql-9.3 hstore

我正在尝试将 bytea 作为值存储在 hstore 中,但我不断收到以下错误:

function hstore(unknown, bytea) does not exist

这是我尝试过的:

UPDATE users set store = store || hstore('key1', pgp_pub_encrypt('testval',dearmor('xxxx')));

最佳答案

am trying to store a bytea as a value in hstore

如果没有某种编码,你不能安全地将 bytea 存储在 hstore 中,因为 hstore 在当前文本编码中存储为文本,但是bytea 没有文本编码,也可能包含在文本字符串中不合法的空字节。

因此您需要将 bytea 编码为十六进制、base64 或其他某种形式,使其成为当前编码中的有效文本。

最简单的方法是将其转换为 text,但我建议改为使用 encodedecode 到/从 base64。这种编码比 PostgreSQL 中用于 bytea 文本表示的 texthex 编码更紧凑,而且它也独立于bytea_output 设置。

例如

UPDATE users
SET store = store
    || hstore('key1', encode( pgp_pub_encrypt('testval',dearmor('xxxx'))), 'base64')
WHERE ... ;

关于sql - Postgres : How to store bytea as value in hstore?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29834772/

相关文章:

在 C 中的结构指针之间转换

sql - 将时间 23 :59:59. 999 添加到结束日期之间

mysql - 计算总行和真实条件行

sql - 插入 postgres 不工作

java - 具有 JPA、PostgreSQL 和 NULL 值的 JodaTime

Java,动态转换,将值从对象传递到目标类的对象

java - 参数化类型的未经检查的强制转换警告

php - 无法弄清楚为什么我不断收到 Mysql 错误

mysql - 如何选择2个日期时间类型变量内同一天的案例

postgresql - 将多行中的一列连接成单个格式化字符串