阻止PostgreSQL将值分成多行?

时间:2018-12-10 17:06:37

标签: postgresql base64 encode psql

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

-[ 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', '')

1 个答案:

答案 0 :(得分:2)

psql不会将字符串分成多行。

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

您可以使用未对齐模式(psql选项-A)来摆脱+,但是输出格式的吸引力不那么大。

您可以使用

来消除字符串中的换行符
SELECT translate(..., E'\n', '');

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