我在将问题32767插入Postgres中的smallint列时出现问题,这会导致错误smallint超出范围.这很奇怪,因为我能做到:
SELECT 32767::int2;
哪个会好起来的.在拉了一下头发后,我终于将其追踪到了相关列的索引.首先,这是架构(嗯,不是真的,但我把它简化为一个repro案例):
CREATE TABLE Test ( id uuid NOT NULL,cooktime smallint,preptime smallint,CONSTRAINT test_pkey PRIMARY KEY (id ) ) WITH ( OIDS=FALSE );
我现在创建以下索引:
CREATE INDEX idx_test_totaltime ON Test USING btree ((cooktime + preptime) );
接下来,我尝试创建以下行:
INSERT INTO Test (CookTime,PrepTime,Id) VALUES ( (32767)::int2,(10)::int2,(E'fd47dc1e-c3c6-42c1-b058-689e926a72a4')::uuid );
我收到错误:
ERROR: smallint out of range sql state: 22003
似乎idx_test_totaltime期望最大值为int2,即使索引应用于两个smallint的总和.
这是一个Postgres错误,还是我错过了一些简单的东西?有没有办法解决这个限制,或者我需要将这些列设为int4并使用CHECK约束将每个值限制为32767?我正在使用Postgres 9.0.0(是的,我需要升级!)但是我创建了一个SQL Fiddle,它在9.1.4上演示了这个错误.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。