PostgreSQL:smallint最大值的常量?

时间:2014-05-08 18:06:08

标签: postgresql constants

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;

2 个答案:

答案 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个字节。