我有一串字符串,其长度变化很大:从30到282420个字符。我想使用jdbc将每个字符串存储到postgres数据库中。存储到PostgreSQL时是否存在最大长度TEXT
String query = "INSERT INTO " + tableName +
" (cbsID, ownerID, naam, soortRegio, jaar, centroidLat, centroidLon, borders) " +
" VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
PreparedStatement ps = connection.prepareStatement(query);
for (Marker marker: gemeenteMarkers)
{
Area gemeente = (Area) marker.getProperty("area");
String sloc = "";
// ... do some computations
// Compute sloc, a string that may contain over 250.000 characters
ps.setInt (1, gemeente.getAreaId());
ps.setInt (2, gemeente.getParentId());
ps.setString (3, gemeente.getAreaName());
ps.setString (4, "GM");
ps.setInt (5, 2014);
ps.setFloat (6, gemeente.getCentroid().getLat());
ps.setFloat (7, gemeente.getCentroid().getLon());
ps.setString (8, slocs);
System.out.printf ("%s - %d locations, len = %d\n", gemeente.getAreaName(), locs.size(), slocs.length());
ps.addBatch();
} // for
int [] affected = ps.executeBatch();
的信息存储在数据库中的所有的权利,除了slocs
,其中包含字符串提到并存储在列'边界。请参阅下面的pdAdmin屏幕截图。
边界被定义为TEXT。正如您在大多数情况下所看到的,它不会被存储,除非它很短,通常小于7000个字符。该代码包含print
语句和输出的一部分如下所示:
Appingedam - 1649 locations, len = 32980
Bedum - 1210 locations, len = 24200
Bellingwedde - 1500 locations, len = 30000
Ten Boer - 1186 locations, len = 23720
Delfzijl - 16 locations, len = 320
Groningen - 2662 locations, len = 53240
Grootegast - 4843 locations, len = 96860
Haren - 1940 locations, len = 38800
Hoogezand-Sappemeer - 1481 locations, len = 29620
Leek - 2575 locations, len = 51500
Loppersum - 2991 locations, len = 59820
Marum - 1936 locations, len = 38720
Almere - 213 locations, len = 4260
Stadskanaal - 2701 locations, len = 54020
Slochteren - 1555 locations, len = 31100
Veendam - 1098 locations, len = 21960
Vlagtwedde - 2621 locations, len = 52420
Zeewolde - 25 locations, len = 500
Winsum - 2992 locations, len = 59840
Zuidhorn - 5282 locations, len = 105640
Dongeradeel - 256 locations, len = 5120
Achtkarspelen - 4644 locations, len = 92880
Ameland - 158 locations, len = 3160
het Bildt - 2337 locations, len = 46740
Franekeradeel - 50 locations, len = 1000
Harlingen - 50 locations, len = 1000
Heerenveen - 5195 locations, len = 103900
在Postgres的手册,我发现
如果您希望长字符串存储,没有具体的上限,使用 文字或字符变化而没有长度说明符,而不是构成任意长度限制的 。
似乎有一些长度限制,虽然只有短文本显示在pgAdmin屏幕上。有谁知道我做错了什么?
编辑1
对不起,暂时不明朗。我添加了代码示例,并且包含程序输出和pgAdmin输出以显示表中的数据。
编辑2
我已经加入一个executeBatch
于该示例。它出现在原始代码中,输出不会改变。
“任何想法,我做错了什么”---你没有解释这个问题,所以我们不知道你做错了什么。 – zerkms
是什么让你觉得有一个限制?爆炸了吗?您的输入数据在某处意外被截断了吗?你能发布代码来重现你的问题吗? – Bohemian
限制为1GB:https://wiki.postgresql.org/wiki/FAQ#What_is_the_maximum_size_for_a_row.2C_a_table.2C_and_a_database.3F –