Is there a maximum length when storing into PostgreSQL TEXT
我有一系列长度变化很大的字符串:从30到282420个字符。我想使用jdbc将每个字符串存储到postgres数据库中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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 ", gemeente.getAreaName (), locs.size (), slocs.length ()); ps.addBatch (); } // FOR INT [] affected = ps.executeBatch (); |
除
边框定义为TEXT。正如您在大多数情况下所看到的那样,它不会被存储,除非它很短,通常小于7000个字符。代码包含
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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手册中我找到了
If you desire to store long strings with no specific upper limit, use
text or character varying without a length specifier, rather than
making up an arbitrary length limit.
似乎有一些长度限制,因为只有短文本显示在pgAdmin屏幕中。有谁知道我做错了什么?
编辑1
很抱歉不清楚。我添加了代码示例,我已经包含了程序的输出和pgAdmin来显示表中的数据。
编辑2
我在示例中添加了
根据Postgres字符类型文档,
进一步向下:
... PostgreSQL provides the
text type, which stores strings of any length.
然而
根据Postgres Wiki,单个列值的硬限制为1GB,因此架构限制为"无限"长度
关于缺乏例子,有一些合理的评论。 在玩这些例子时,我偶然发现了pgAdmin的一些显着行为:它没有显示存在的信息。 只需在pgAdmin数据编辑器的输出中选择一些行,这些行显示在原始问题中并将其粘贴到编辑器中。 然后它会显示在pgAdmin的数据显示中看不到的信息,见下文。
1 2 3 4 5 6 7 8 9 10 | 3;0;"Appingedam";"GM";2014;53.3172;6.84957;"53.345131 6.885408 53.344925 6.885422 ... 5;0;"Bedum";"GM";2014;53.2949;6.59717;"53.255638 6.587573 53.255646 6.587514 53.25... 7;0;"Bellingwedde";"GM";2014;53.0986;7.12118;"53.097076 7.038233 53.097099 7.038254... 9;0;"Ten Boer";"GM";2014;53.2788;6.69145;"53.312183 6.740470 53.312176 6.740486 53... 10;0;"Delfzijl";"GM";2014;53.3227;7.09945;"53.322491 7.100943 53.322414 7.100940 5... 14;0;"Groningen";"GM";2014;53.2222;6.5634;"53.198223 6.515755 53.198238 6.515728 5... 15;0;"Grootegast";"GM";2014;53.2086;6.27322;"53.203838 6.318381 53.203819 6.318180 ... 17;0;"Haren";"GM";2014;53.1545;6.63106;"53.165165 6.560897 53.165207 6.560884 53.1... 18;0;"Hoogezand-Sappemeer";"GM";2014;53.1473;6.7468;"53.116516 6.743022 53.116371 6... 22;0;"Leek";"GM";2014;53.1633;6.36926;"53.211250 6.362241 53.211262 6.362327 53.21... |
因此,似乎pgAdmin表现得像你没有看到的是你没有得到的。 Java,jdbc和Postgres的行为与预期的一样,pgAdmin没有。