【问题标题】:Stop PostgreSQL from spliting value(s) in multiple lines?阻止 PostgreSQL 在多行中拆分值?
【发布时间】:2019-05-11 15:08:56
【问题描述】:

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

【问题讨论】:

  • hummm....如果你的意思是\pset columns xxx我已经尝试过但没有工作....
  • 不,不是——我在全屏模式下使用 24" 显示器。如果我不将 bytea 转换为字符串,它实际上不会拆分字符串。跨度>

标签: postgresql base64 encode psql


【解决方案1】:

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

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

您可以使用未对齐模式(psql 选项-A)来摆脱+,但是这样输出格式就没有那么吸引人了。

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

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

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

【讨论】:

  • 为什么encode(foo::bytea, 'base64') 会在值中包含新行?
  • base64 很常见。 PostgreSQL 规定每行 76 个字符的限制,可能是为了遵守 MIME。
  • 好的,那我现在该怎么办?我的实际输出是逗号分隔的 CSV 并将这些多行放在双引号内,这会破坏其余的处理。有什么解决办法吗?
  • @MacUsers:使用十六进制编码怎么样? encode(foo::bytea, 'hex')
  • @MacUsers 但这是完全有效的 CSV。也许你应该得到一个更好的 CSV 解析器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
  • 1970-01-01
  • 2015-07-07
  • 2018-02-06
  • 1970-01-01
  • 2012-10-21
  • 2021-08-21
相关资源
最近更新 更多