PostgreSQL:非编程地选择大对象(例如文本)(使用工具)

时间:2012-02-24 15:01:27

标签: postgresql jdbc

我们正在使用带有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执行相同的查询,我会得到预期的内容(我存储在列中的文本)

2 个答案:

答案 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

请参阅:pgAdmin III: How to view a blob?