如何查看 table 的主键?以及如何添加多个主键?

How do I see the primary key of a table? And how can I add multiple primary keys?

我有以下 table: https://i.imgur.com/gWyCQxS.png

db name: testdb
table name: testtable

我在创建 table 时故意没有创建任何主键,因为我想在之后学习如何创建它。

我使用以下方法添加主键:

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:为什么这个table不允许我有多个主键,如何添加多个?

此外,在不使用 pgAdmin GUI 的情况下,我正在尝试查看 testtable 的当前主键是什么。我在 Whosebug 上找到了一个推荐以下代码的线程:

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

问题 2:如何使用 psql 或不使用 pgAdmin GUI 查看所有主键?

A1: 尝试使用这样的复合 KEY:

ALTER TABLE testtable
ADD PRIMARY KEY (column1,column2);

A2:(Q2:如何使用psql查看所有主键?)

像这样:

select tc.table_schema, tc.table_name, kc.column_name
from information_schema.table_constraints tc
  join information_schema.key_column_usage kc 
    on kc.table_name = tc.table_name and kc.table_schema = tc.table_schema and kc.constraint_name = tc.constraint_name
where tc.constraint_type = 'PRIMARY KEY'
  and kc.ordinal_position is not null
order by tc.table_schema,
         tc.table_name,
         kc.position_in_unique_constraint;