在 psql 中获取 TEXT 列值

Get TEXT column value in psql

我已经使用带 @Lob String 字段的 Hibernate 创建了简单的实体。在 Java 中一切正常,但是我无法使用 psqlpgAdmin.

直接检查数据库中的值

这是来自数据库的定义:

=> \d+ user_feedback
                    Table "public.user_feedback"
 Column |  Type  | Modifiers | Storage  | Stats target | Description 
--------+--------+-----------+----------+--------------+-------------
 id     | bigint | not null  | plain    |              | 
 body   | text   |           | extended |              | 
Indexes:
    "user_feedback_pkey" PRIMARY KEY, btree (id)
Has OIDs: no

这是我从 select 得到的:

=> select * from user_feedback;
 id | body  
----+-------
 34 | 16512
 35 | 16513
 36 | 16514
(3 rows)

实际"body"内容是所有行"normal"文本,绝对不是这些数字。

如何从 psql 中检索 body 列的实际值?

这会将 LOB 16512 的内容存储在文件 out.txt 中:

\lo_export 16512 out.txt

虽然这里通常不推荐使用@Lob(数据库备份问题...)。请参阅 store-strings-of-arbitrary-length-in-postgresql 了解替代方案。

Hibernate 将值作为外联对象存储在 pg_largeobject table 中,并将 pg_largeobject 条目的对象 ID 存储在您的 table 中.参见 PostgreSQL manual - large objects

听起来您期望的是内联字节数组 (bytea) 存储。如果是这样,您可能想要映射一个 byte[] 字段 而没有 @Lob 注释,而不是 @Lob String。请注意,此更改将 不向后兼容 - 您必须从数据库中导出数据,然后删除 table 并使用 Hibernate 的新定义重新创建它。

如何映射数据的选择是由 Hibernate 而不是 PostgreSQL 决定的。

查看相关内容:

  • proper hibernate annotation for byte[]
  • How to store image into postgres database using hibernate