我们正在使用带有JPA的PostgreSQL,它将大字符串映射到类型为TEXT
的列。
虽然我们能够以编程方式读取和写入数据,但是当我选择数据时,pgAdmin和psql只显示对象ID。
有没有一种方法/工具可以快速选择数据而无需使用某些API(例如JDBC)?
一个例子:
doi=> \d+ xmlsnippet;
Table "doi.xmlsnippet"
Column | Type | Modifiers | Storage | Description
--------------+------------------------+-----------+----------+-------------
dbid | bigint | not null | plain |
version | bigint | not null | plain |
datasnippet | text | | extended |
doi | character varying(255) | | extended |
doipool_dbid | bigint | | plain |
列datasnippet
包含一些大字符串(带有XML代码)
当我选择它时,我得到了
doi=> select * from xmlsnippet;
dbid | version | datasnippet | doi | doipool_dbid
-------+---------+-------------+--------------------------+--------------
43 | 0 | 282878 | 10.3929/ethz-a-000077127 | 13
44 | 0 | 282879 | 10.3929/ethz-a-000085677 | 13
45 | 0 | 282880 | 10.3929/ethz-a-000085786 | 13
46 | 0 | 282881 | 10.3929/ethz-a-000087642 | 13
47 | 0 | 282882 | 10.3929/ethz-a-000088898 | 13
^^^^^^^
编辑:如果我使用JDBC执行相同的查询,我会得到预期的内容(我存储在列中的文本)
答案 0 :(得分:6)
也许“常见的嫌疑人”之一(即JPA / Hibernate / PostgreSQL JDBC驱动程序)将该列映射到PostgreSQL的“大对象”系统。
psql
shell中的快速测试:
db=> \lo_export 282878 /tmp/x.txt
lo_export
会将示例中第一个id引用的内容导出到文件/tmp/x.txt
中。用编辑器检查一下。告诉我们这是否是您的数据。
如果真的发生了这种映射,那么你就会遇到维护问题 - 必须手动删除大对象,并且还有一些其他的内在缺点。但这是另一个故事。
答案 1 :(得分:2)
在pgAdmin III中,我使用:
select dType, id, loread(lo_open(docxml::::int, 131072), 999999999) from XmlPadraoNFe