我们将 PostgreSQL 与 JPA 结合使用,它将大字符串映射到类型为 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 执行相同的查询,我会得到预期的内容(我存储在列中的文本)
最佳答案
也许“常见嫌疑人”之一(即 JPA/Hibernate/PostgreSQL JDBC 驱动程序)将列映射到 PostgreSQL 的“大对象”系统。
psql
shell 中的快速测试:
db=> \lo_export 282878 /tmp/x.txt
lo_export
会将示例中第一个 id 引用的内容导出到文件 /tmp/x.txt
中。与编辑器一起检查。告诉我们这是否是您的数据。
如果这种映射真的发生了,那么你就有了维护问题——大对象必须手动删除,并且有一些其他的内在缺点。但那是另一回事了。
关于PostgreSQL:以非编程方式(使用工具)选择大对象(例如,文本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9432884/