在 Postgres 中停止使用 SERIAL

主要观点:应停止使用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 为serialidentity columns生成相同命名的序列,如<table_name>_<column_name>_seq
  • serial的操作可能导致一些意外情况,如误删序列后default被移除等,而identity column能避免这些问题。
  • 复制带有serial的表结构时,新表的id列仍指向原序列,删除原表会影响新表,而复制带有identity column的表结构时会创建新序列。
阅读 11
0 条评论