为什么无符号整数在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有自动增量的serial
和bigserial
types。