插入长度为>的文本4681个字符导致空表字段,没有错误消息

时间:2014-03-27 18:00:21

标签: postgresql text insert field postgresql-9.2

我正面临一个奇怪的错误。我在Postgresql中有一个表text字段"txtj"。我还有一个用以下函数填充此表的函数:

INSERT INTO "precomputed" ("stmt","param","slice","txtj","crea","exp")
     VALUES (statement_name,parametr,sliice,textj,creation,expiration);

"txtj"的字符长度最多为4681时,该字段将正确填充。但是,如果它有更多字符,则该字段留空,不会引发错误消息。我可以通过查看子字符串来找到这个数字:

textj := substring(textj from 0 for 4681);

为什么呢?文本字段的长度是否有限制?我的textj包含大约7500个字符。我该如何解决这个问题

更新

我可以使用以下脚本(我在Windows 7下)从pgAdmin III的SQL控制台复制此问题:

CREATE TABLE IF NOT EXISTS "test" (i integer, ttt text);

CREATE OR REPLACE FUNCTION fill_test()
RETURNS void AS $$
DECLARE
    ffill text = '';
BEGIN
    TRUNCATE "test";
    FOR i IN 0..250 LOOP
        INSERT INTO "test" VALUES ((i*20),ffill);
        ffill := ffill || '01234567890123456789';
    END LOOP;
END; $$
LANGUAGE plpgsql;

SELECT fill_test();
SELECT * FROM "test" ORDER BY "i";

4680以上,这些字段是空的......

更新II

select version()返回:

"PostgreSQL 9.2.6, compiled by Visual C++ build 1600, 32-bit"

pgAdmin的版本:1.16.1

1 个答案:

答案 0 :(得分:1)

对于记录,Postgresql方面没有错误。我已经设法使用连接到数据库的小节点应用程序正确检索字段值。

我将此答案作为其他人的信息。根据jjanes的说法,问题不会发生在9.3.2 / 1.18.1中。