PostgreSQL数组插入大小限制错误

时间:2015-12-16 02:40:39

标签: postgresql

我收到以下Postgres错误:

  

错误:类型字符变化(1024)

的值太长

令人不快的陈述是:

INSERT INTO integer_array_sensor_data (sensor_id, "time", status, "value") 
VALUES (113, 86651204, 0, '{7302225, 7302161, 7302593, 730211, 
        ... <total of 500 values>... 7301799, 7301896}');

表格:

CREATE TABLE integer_array_sensor_data (
    id SERIAL PRIMARY KEY, 
    sensor_id INTEGER NOT NULL, 
    "time" INTEGER NOT NULL, 
    status INTEGER NOT NULL, 
    "value" INTEGER[] NOT NULL, 
    server_time TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT NOW()
); 

研究PostgreSQL文档没有提到有关数组大小限制的任何内容。

知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

问题不是来自Array本身,而是来自Varchar String声明Insert中的数组值。某些驱动程序键入字符串文字为varchar(1024)导致该问题。

而不是

'{1,2,3}'

尝试使用

ARRAY[1,2,3]

否则您可以尝试将字符串的类型声明为TEXT(无限制)

'{1,2,3}'::text

答案 1 :(得分:0)

我开始理解我的问题,虽然我还没有找到解决方案。问题是字符串某处库级别存在限制。我实际上使用的是pqxx,你不能拥有超过1024个字符的字符串。我已经接受了纪尧姆F.的回答,因为他认为这一点,但铸造不起作用。一旦找到解决方案,我就会编辑我的回复,以便人们知道该怎么做。

我只是尝试了准备好的陈述,他们也有同样的限制。

解决方法是使用COPY或其pqxx绑定pqxx:tablewriter。