PostgreSQL是否有smallint
的最大值的常量(如MAXFLOAT in Objective-C)?
我知道PostgreSQL numeric types documentation说它是32767
,但我宁愿使用常量而不是硬编码可能会改变的值。
我正在使用此号码来防止在递增smallint
时出错,例如:
UPDATE populations
SET count = count + 1
WHERE city_id = 3
AND count < 32767;
答案 0 :(得分:1)
创建它:
create function MAX_SMALLINT() returns smallint immutable language sql as '
select 32767::smallint;
';
使用它:
UPDATE populations
SET count = count + 1
WHERE city_id = 3
AND count < MAX_SMALLINT();
答案 1 :(得分:1)
在延伸Neil的建议时,您可以使用:
create function MAX_SMALLINT() returns smallint immutable language sql as '
select ((1 << ((pg_column_size(1::smallint) << 3) - 1)) - 1)::smallint;
';
但老实说,我并不相信在Postgres中,smallint将不会超过2个字节。