Search Postgresql Archives

Negative numbers to DOMAIN casting

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I have uint4 domain created like this:
CREATE DOMAIN uint4 AS int8
   CHECK(VALUE BETWEEN 0 AND 4294967295);


If I try to cast negative number to this domain check constraint is not validated:
SELECT -1::uint4, pg_typeof(-1::uint4), 1::uint4, pg_typeof(1::uint4);
 ?column? | pg_typeof | uint4 | pg_typeof
----------+-----------+-------+-----------
       -1 | bigint    |     1 | uint4

Also the pg_typeof returns bigint, but if i do int8 to int2 conversion pg_typeof returns right type:
SELECT pg_typeof(-1::int4::int2);
 pg_typeof
-----------
 smallint

If I put number inside brackets I get check error:
select (-1)::uint4;
ERROR:  value for domain uint4 violates check constraint "uint4_check"


The same error is thrown if I use CAST:
SELECT CAST(-1 AS uint4);
ERROR:  value for domain uint4 violates check constraint "uint4_check"

And also if domain is used in table then check is also working as expected:
CREATE TABLE test(i uint4);
INSERT INTO test VALUES(-1);
ERROR:  value for domain uint4 violates check constraint "uint4_check"

I tested this on PG 9.4 and 9.5.
Is this expected behavior?

Regards,
Matija Lesar

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux