为什么无符号整数在PostgreSQL中不可用?

我碰到过这个post( MySQL中的tinyint,smallint,mediumint,bigint和int有什么区别? ),并且意识到PostgreSQL不支持无符号整数。

任何人都可以帮助解释为什么是这样吗?

大多数情况下,我使用无符号整数作为MySQL中自动递增的主键。 在这样的devise中,当我将数据库从MySQL移植到PostgreSQL时,如何克服这一点?

谢谢。

已经回答为什么postgresql缺less无符号types。 不过,我build议使用无符号types的域名。

http://www.postgresql.org/docs/9.4/static/sql-createdomain.html

  CREATE DOMAIN name [ AS ] data_type [ COLLATE collation ] [ DEFAULT expression ] [ constraint [ ... ] ] where constraint is: [ CONSTRAINT constraint_name ] { NOT NULL | NULL | CHECK (expression) } 

域就像一个types,但有一个额外的约束。

对于一个具体的例子,你可以使用

 CREATE DOMAIN uint2 AS int4 CHECK(VALUE >= 0 AND VALUE < 65536); 

这是psql在尝试滥用types时给出的内容。

DS1 =#select(346346 :: uint2);

错误:域uint2的值违反检查约束“uint2_check”

它不在SQL标准中,因此实施它的一般要求较低。

具有太多不同的整数types使得typesparsing系统更加脆弱,所以在混合中添加更多types会有一些阻力。

也就是说,没有理由不能做到这一点。 这只是很多工作。

您可以使用CHECK约束,例如:

 CREATE TABLE products ( product_no integer, name text, price numeric CHECK (price > 0) ); 

另外PostgreSQL有自动增量的serialbigserialtypes。