You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pgcrypto命令输出非标准含大量反斜杠,是否安装错误?

别担心,这不是pgcrypto安装错误导致的——其实是PostgreSQL处理二进制数据输出的显示格式问题,属于很常见的小配置项差异~

pgcrypto的encrypt()和digest()函数默认返回的是bytea(二进制数据)类型,而PostgreSQL通过bytea_output参数控制这类数据的显示方式:

  • 当参数设为escape(默认值)时,会把非打印字符转义成反斜杠开头的八进制/特殊字符,就会出现你看到的4Y\026'\371\310\352\344\027\374|\273\364XY,这类格式;
  • 当参数设为hex时,就会输出你预期的\x开头的十六进制字符串格式。

解决步骤

  • 第一步:先检查当前的bytea_output设置,执行命令:

    SHOW bytea_output;
    

    大概率会返回escape。

  • 第二步:修改输出格式

    • 临时生效(仅当前数据库连接有效):
      SET bytea_output = 'hex';
      
    • 永久生效(所有新连接都适用):找到PostgreSQL的配置文件postgresql.conf,修改bytea_output = 'hex',然后重启PostgreSQL服务或执行SELECT pg_reload_conf();重载配置。
  • 第三步:验证效果
    重新执行你的加密命令:

    select encrypt('123456789012345','1234','aes');
    

    现在就能得到预期的\x34591627f9c8eae417fc7cbbf458592c格式输出了。

关于digest的额外小技巧

如果使用digest()时想直接获取纯十六进制字符串,除了修改bytea_output,还可以用encode()函数直接转换结果,不受配置参数影响:

SELECT encode(digest('your_content', 'sha256'), 'hex');

内容的提问来源于stack exchange,提问作者Greg Rowles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:18:10