主键
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 官方文档(英文)。