如何查看 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;
我有以下 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;