全部术语

主键

PostgreSQL 中的主键是什么?

主键是唯一标识每一行的一列或一组列。PostgreSQL 通过唯一的 B-tree 索引和 NOT NULL 来保证它。

主键约束将一列或一组列标记为表中各行的标识符:其值必须唯一且不能为空。一张表最多只能有一个主键。

添加主键会自动在其列上创建唯一的 B-tree 索引,并将这些列标记为 NOT NULL。其他表中的外键通常会引用主键,许多工具也要求每张表都有主键。常见的选择是标识列,或者产品编码之类的自然键。

示例

该示例创建一张以 sku 为键的表,使用 ON CONFLICT DO NOTHING 插入一个重复的键,使其被跳过而不是报错,然后列出 PostgreSQL 为该键创建的索引。

CREATE TABLE products (
  sku text PRIMARY KEY,
  name text NOT NULL
);
INSERT INTO products VALUES ('P-1', 'Lamp');
INSERT INTO products VALUES ('P-1', 'Desk') ON CONFLICT DO NOTHING;

SELECT indexname, indexdef FROM pg_indexes WHERE tablename = 'products';

适用于原生 PostgreSQL 16 或 17 的纯 SQL,无需任何扩展。请在一个可随时丢弃的空数据库中运行。

参考资料

PostgreSQL 官方文档(英文)。

相关术语