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

Mat*_*teo 3 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    | 
Run Code Online (Sandbox Code Playgroud)

该列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

                   ^^^^^^^
Run Code Online (Sandbox Code Playgroud)

编辑:如果我使用JDBC执行相同的查询,我会得到预期的内容(我存储在列中的文本)

A.H*_*.H. 6

也许"常见的嫌疑人"之一(即JPA/Hibernate/PostgreSQL JDBC驱动程序)将该列映射到PostgreSQL的"大对象"系统中.

psqlshell中的快速测试:

db=> \lo_export 282878 /tmp/x.txt
lo_export
Run Code Online (Sandbox Code Playgroud)

会将您示例中第一个id引用的内容导出到文件中/tmp/x.txt.用编辑器检查一下.告诉我们这是否是您的数据.

如果真的发生了这种映射,那么你就有了一个维护问题 - 必须手工删除大对象,并且还有一些其他的内在缺点.但这是另一个故事.