主要观点:应停止使用serial
,Postgres 自 2017 年 10 版本起支持identity columns
,可替代serial
。
关键信息:
serial
存在权限问题,需给生成id
列的序列授予使用权限,或改用identity column
。serial
缺乏完整性保证,插入操作可能导致序列未正确推进,而identity column
会给出友好错误提示。serial
不是真正的类型,内部解析为创建序列并关联,identity column
在模式定义中更直观。serial
人机工程学不佳,更改id
列起始值需操作序列,而identity column
可直接在表中更改。serial
不是 SQL 标准,迁移时可能带来麻烦,identity columns
是 SQL 标准。
重要细节:- 内部,Postgres 为
serial
和identity columns
生成相同命名的序列,如<table_name>_<column_name>_seq
。 - 对
serial
的操作可能导致一些意外情况,如误删序列后default
被移除等,而identity column
能避免这些问题。 - 复制带有
serial
的表结构时,新表的id
列仍指向原序列,删除原表会影响新表,而复制带有identity column
的表结构时会创建新序列。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。