存储到PostgreSQL文本时是否有最大长度

我有一个长度变化很大的字符串序列:从30到282420个字符。我想使用jdbc将每个字符串存储到postgres数据库中

String query=“插入”+tableName+
“(cbsID、ownerID、naam、soortRegio、jaar、centroidLat、centroidLon、borders)”+
“值(?,,,,,,,,,,,,,?)”;
PreparedStatement ps=connection.prepareStatement(查询);
用于(标记:Gemeentermarkers)
{
面积gemeente=(面积)marker.getProperty(“面积”);
字符串sloc=“”;
//…做一些计算
//计算sloc,一个可能包含超过250.000个字符的字符串
ps.setInt(1,gemeente.getAreaId());
ps.setInt(2,gemeente.getParentId());
ps.setString(3,gemeente.getAreaName());
ps.setString(4,“GM”);
ps.setInt(2014年5月);
ps.setFloat(6,gemeente.getCentroid().getLat());
ps.setFloat(7,gemeente.getCentroid().getLon());
ps.setString(8,SLOC);
System.out.printf(“%s-%d个位置,len=%d\n”、gemeente.getAreaName()、locs.size()、slocs.length());
ps.addBatch();
}//为了
int[]impacted=ps.executeBatch();

该信息完全存储在数据库中,除了slocs,它包含所述字符串并存储在“borders”列中。请参见下面的pdAdmin屏幕截图。

边框定义为文本。正如您所看到的,在大多数情况下,它不会被存储,除非它很短,通常小于7000个字符。代码包含一个print语句,部分输出如下所示:

Appingedam-1649个位置,len=32980
贝杜姆-1210个位置,长度=24200
Bellingwedde-1500个地点,len=30000
十个布尔-1186个位置,len=23720
Delfzijl-16个位置,长度=320
格罗宁根-2662处,len=53240
格罗特加斯特-4843处,len=96860
哈伦-1940个地点,len=38800
Hoogezand Sappemer-1481个位置,len=29620
韭菜-2575处,长度=51500
Loppersum-2991个位置,长度=59820
Marum-1936个地点,len=38720
阿尔梅雷-213个位置,透镜=4260
Statskanaal-2701个位置,len=54020
斯洛赫滕-1555个位置,长度=31100
Veendam-1098个位置,长度=21960
Vlagtwedde-2621个位置,长度=52420
Zeewolde-25个位置,长度=500
Winsum-2992个位置,len=59840
Zuidhorn-5282个位置,透镜=105640
Dongeradeel-256个位置,长度=5120
Achtkarspelen-4644个位置,len=92880
Ameland-158个位置,长度=3160
het Bildt-2337个位置,len=46740
Franekeradeel-50个位置,长度=1000
哈林根-50个位置,len=1000
Heerenveen-5195个位置,长度=103900

在我找到的postgres手册中

如果希望存储没有特定上限的长字符串,请使用
不带长度说明符的文本或字符,而不是
组成任意长度限制

虽然pgAdmin屏幕上只显示短文本,但似乎有一些长度限制。有人知道我做错了什么吗

编辑1

对不起,我不清楚。我已经添加到代码示例中,并包含了程序和pgAdmin的输出,以在表中显示数据

编辑2

我在示例中添加了一个executeBatch。它出现在原始代码中,输出不变

根据Postgres字符类型文档,文本变量无限长度
再往下看:

。。。PostgreSQL提供了text类型,它存储任意长度的字符串

但是

根据Postgres Wiki,单列值的硬限制为1GB,因此架构将“无限”长度文本值的实用限制限制为1GB

发表评论