在 psql 中获取 TEXT 列值
Get TEXT column value in psql
我已经使用带 @Lob String
字段的 Hibernate 创建了简单的实体。在 Java 中一切正常,但是我无法使用 psql
或 pgAdmin
.
直接检查数据库中的值
这是来自数据库的定义:
=> \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
我已经使用带 @Lob String
字段的 Hibernate 创建了简单的实体。在 Java 中一切正常,但是我无法使用 psql
或 pgAdmin
.
这是来自数据库的定义:
=> \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