我看到这篇文章(What is the difference between tinyint, smallint, mediumint, bigint and int in MySQL?),意识到PostgreSQL不支持无符号整数.

有人能解释一下为什么会这样吗?

大多数时候,我在MySQL中使用无符号整数作为自动递增的主键.在这种设计中,当我将数据库从MySQL移植到PostgreSQL时,如何克服这个问题?

谢谢

推荐答案

postgresql缺少无符号类型的原因已经得到了解答.不过,我建议对未签名类型使用域.

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) }

域类似于类型,但有一个附加约束.

举个具体的例子

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

以下是当我try 滥用类型时psql给出的结果.

DS1=# Select (346346::uint2);

错误:域uint2的值违反了判断约束"uint2\u check"

Postgresql相关问答推荐

Postgr不列出运算符和函数

为什么Postgres在打印时能完全缩短时间跨度?

在Ubuntu 18.04 Bionic上安装PostgreSQL(已删除回购)

错误:用户需要系统密码:postgres

PostgreSQL:在 select 和 group by 中使用不同的列不会导致错误

PostgreSQL 连接字符串的正则表达式

使用 pgAdmin 4 v7.4 在 Windows 11 上全新安装 PostgreSQL 15.3-3 无法启动 - 卡在正在加载 pgAdmin 4 v7.4...

使用 WHERE 子句创建递归视图

在 postgres/presto/AWS-Athena 中,与 array_agg( (col1, col2) ) 相反的是什么来获得每组多行?

空表上的 Postgres 意外行为

Postgres 查询指向国外数据工作者的分区表比直接查询 fdw 慢很多倍

Supabase 数据库大小问题

try 访问本地主机中的数据库时如何解决Error: The server does not support SSL connections?

在postgres的同一列中存储不同数据类型的合理方法?

使用 pg-promise 插入多条记录

设置 Phoenix 框架和 Ecto 以使用 UUID:如何插入生成的值?

在 postgresql 中将 bool 转换为 int

PostgreSQL 获取过go 12 小时的元素

PG::ConnectionBad FATAL:role "Myname" does not exist

如果 PostgreSQL count(*) 总是很慢,如何对复杂查询进行分页?