如何使用PostgreSQL为单个表中的多个列提供主键?

例子:

Create table "Test" 
(
   "SlNo" int not null primary key,
   "EmpID" int not null, /* Want to become primary key */
   "Empname" varchar(50) null,
   "EmpAddress" varchar(50) null
);

注:我想让"EmpID"也成为主键.

推荐答案

There can only be one primary key per table - as indicated by the word "primary".
You can have additional UNIQUE columns like:

CREATE TABLE test(
   sl_no int PRIMARY KEY,  -- NOT NULL due to PK
   emp_id int UNIQUE NOT NULL,
   emp_name text,
   emp_addr text
);

属于PRIMARY KEY的列将自动标记为NOT NULL.

或者使用表约束而不是列约束来创建单个multicolumn primary key.这在语义上与上面的不同:现在,只有两列中的combination列必须是唯一的,每列可以单独保存重复项.

CREATE TABLE test(
   sl_no int,     -- NOT NULL due to PK below
   emp_id int ,   -- NOT NULL due to PK below
   emp_name text,
   emp_addr text,
   PRIMARY KEY (sl_no, emp_id)
);

多列UNIQUE约束也是可能的.

旁白:不要在Postgres中使用驼峰大小写标识符.使用合法的小写标识符,这样就不必使用双引号.让你的生活更轻松.见:

Postgresql相关问答推荐

如何使用docker/docker-compose转到本地主机?

如何在PostgreSQL中正确删除数据库

在Postgres中,如何删除包含N个自然数的表,并替换为生成子查询?

如何诊断字符编码问题

如何返回old_ids和重复行的映射';来自PostgreSQL函数的s new_id

为什么 Postgres 中的 now() 和 now()::timestamp 对于 CET 和 CEST 时区如此错误?

使用 pgx 扫描范围类型

postgres 如何计算多列哈希?

使用 Heroku CLI、Postgres 的 SQL 语法错误

转换数组类型

处理 sqlalchemy 断开连接的更好方法

PostgreSQL 中的 DATEADD 等效项

如何在容器内创建 postgres 扩展?

没有查询要创建的in ... error

Rails ActiveRecord - 如何获取两个日期之间的记录

如何使用 psql 执行 *.sql 文件

在 Postgresql 中拆分逗号分隔的字段并对所有结果表执行 UNION ALL

postgresql 查询以显示用户的组

如何为 postgres 编写 DELETE CASCADE?

IF处或附近的 Postgres 语法错误