如何停止PostgreSQL将值拆分成多行?

9

我正在使用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', '')

嗯......如果你是指\pset columns xxx,我已经尝试过了,但没有起作用。 - MacUsers
不,不是这样的 - 我正在使用全屏模式下的24英寸显示器。如果我不将 bytea 转换为字符串,它实际上不会拆分字符串。 - MacUsers
翻译成功!当我们尝试将编码字符串作为URL参数传递时,换行符被URL编码导致原始编码出现错误。 - bombillazo
1个回答

11

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

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

您可以使用非对齐模式(psql选项-A)来摆脱+,但输出格式则不太美观。

您可以使用以下方法消除字符串中的换行符:

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

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


1
为什么 encode(foo::bytea, 'base64') 返回的值会包含换行符? - user330315
这在base64中很常见。PostgreSQL每行强制限制76个字符,可能是为了符合MIME标准。 - Laurenz Albe
可能这是一个有效的CSV文件,但现有的脚本期望每个记录集都有一行,而这不再是情况。我的关注点不在CSV文件上,而在于psql本身的“输出”。要接受这种“非标准”的逗号分隔文件需要改变很多东西,因此我正在寻找解决方案... - MacUsers
@a_horse_with_no_name,很遗憾,我们不能做其他的事情 - 目标系统必须使用base64。但令人惊讶的是,它没有将十六进制输出分成多行。 - MacUsers
1
查看我的扩展答案 - 您可以使用“translate”来摆脱换行符。 - Laurenz Albe
显示剩余4条评论

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