首页 > 解决方案 > 阻止 PostgreSQL 在多行中拆分值?

问题描述

我正在使用将二进制数据(bytea)数据类型转换为字符串,encode(foo::bytea, 'base64')但输出被分成多行:

-[ RECORD 1 ]-+-----------------------------------------------------------------------
 req_id       | 132675
 b_string     | d4IF4jCCBd4GCSqGSIb3DQEHAqCCBc8wggXLAgEDMQ0wCwYJBAIBMIGYBgZngQgBAQGg+
              | gY0EgYowgYcCAQAwCwYJYIZIAQAwCwYJYIZIAWUDBAIHUwUdH0JybzpY2evf+v9Xg86b+
              | HSGTGYBIb/QwJQIBAgQg1M6/cJ+S39XY1lm43oenxJNLrYcc3hVw7fgwJQIBDgQgIAil+
              | 1JnYbdS0p4pK07kMkb/dbMcxryx6mqbLTzx+YJ6gggQbMI2gAwIBAgIESS7vwTAKBggq+
              | LUxRjUXbTgfGwUKOFwemsc4KXbsLZ13MkbNfAQ==

如何获得单个字符串?

更新:基于@LaurenzAlbe 的解决方案

为了完整起见,这就是我最终做的,给了我想要的结果:

translate(encode(foo::bytea, 'base64'), E'\n', '')

标签: postgresqlbase64encodepsql

解决方案


psql不会将您的字符串拆分为多行。

它是包含换行符 (ASCII 10) 并psql准确显示它们的字符串。每行+末尾的psql' 是告诉您该值在下一行继续的方式。

您可以使用未对齐模式(psqloption -A)来摆脱+,但输出格式则不那么吸引人。

你可以去掉字符串中的换行符

SELECT translate(..., E'\n', '');

decode将能够处理这样的字符串。


推荐阅读