首页 > 解决方案 > 从数据库中获取大字符串

问题描述

我的 postgresql 数据库中有大字符串。这是一个 base64 编码的 mp3,我必须选择具有该大字符串的列并通过一次选择获取所有数据。如果我写正常选择

SELECT * FROM public.song_data WHERE id=1;

它只会从该字符串返回 204 kB 并且该字符串有 2.2 MB。

此外,datagrip 仅显示该字符串中的 204 kB 数据。有没有一种方法可以通过一次选择来获取所有数据?

标签: databasepostgresqlcharacter-encoding

解决方案


真奇怪。你确定你的数据没有被修剪到某个地方吗?您可以使用功能length检查实际尺寸。

postgres=# select length('aaa');
┌────────┐
│ length │
╞════════╡
│      3 │
└────────┘
(1 row)

2 MB 对于 Postgres 来说不算什么,但一些客户端(或协议)可能会出现问题。有时需要使用函数lo_importlo_export作为客户端/协议限制的解决方法。要从表中选择数据,您应该使用SELECT语句。没有其他办法。从理论上讲,您可以将任何字符串转换为大对象,然后通过函数lo_export,您可以使用 LO 特殊协议从数据库中下载这个大对象。对于 2MB,我认为没有必要。

请尝试检查您的数据是否正确存储到 postgres。文本的理论限制,varchar 为 1GB。实际限制值较小 - 大约 100MB。它的价值明显高于 2MB。

Postgres 具有二进制数据的特殊数据类型 - bytea. 默认情况下,它会与十六进制代码进行对话,并且也支持 base64 编码。


推荐阅读