【发布时间】:2020-10-24 20:09:41
【问题描述】:
我有下表:https://i.imgur.com/gWyCQxS.png
db name: testdb
table name: testtable
我在创建表时故意没有创建任何主键,因为我想在以后学习如何创建它。
我使用以下方法添加主键:
ALTER TABLE testtable
ADD PRIMARY KEY (column2);
在 pgAdmin 中,我可以看到它有效:https://i.imgur.com/3wKsOLo.png
我尝试对 column1 执行相同操作,但出现此错误:ERROR: multiple primary keys for table "testtable" are not allowed SQL state: 42P16
Q1:为什么我不允许此表有多个主键,如何添加多个主键?
另外,不使用 pgAdmin GUI,我试图查看 testtable 的当前主键是什么。我在 Stackoverflow 上找到了一个推荐以下代码的线程:
select OBJECT_NAME(OBJECT_ID) AS NameofConstraint
FROM sys.objects
where OBJECT_NAME(parent_object_id)='testtable'
and type_desc LIKE '%CONSTRAINT'
执行此操作后出现错误:ERROR: relation "sys.objects" does not exist。
Q2:如何使用 psql 或不使用 pgAdmin GUI 查看所有主键?
【问题讨论】:
-
1) 不可能有多个 PK,只有一个 PK 可能在多个列上 2) 查看
pg_constraintcatalog 其中contype = 'p'与psql使用\d <tablename>元命令 -
As documented in the manual
psql命令查看表定义包括主键是\d -
使用下面的 AziMez 方法,我可以添加两个主键:i.imgur.com/heBzuhP.png
标签: sql postgresql psql pgadmin-4