2016-01-22 64 views
1

如何检查约束的名称?Postgres检索约束的名称

例如:

ALTER TABLE contractor_contractor ADD CONSTRAINT commerce_contractor_pkey PRIMARY KEY(id); 

当我尝试描述与\d我的表我没有看到我的主键的任何信息。

+0

看起来像你在psql中,但pgadmin3会默认显示给你。 – Bill

回答

1

你可以从你的信息模式查询约束名称:

SELECT constraint_name 
FROM information_schema.table_constraints 
WHERE table_catalog = 'my_catalog_name' AND -- Database name 
     table_schema = 'my_schema_name' AND  -- Often "public" 
     table_name = 'contractor_contractor' AND 
     constraint_type = 'PRIMARY KEY'; 

还要注意的是plsql中的较新版本不提供有关根据该索引部分主键的信息。例如:

db=> CREATE TABLE contractor_contractor (id INT); 
CREATE TABLE 
db=> ALTER TABLE contractor_contractor 
db-> ADD CONSTRAINT commerce_contractor_pkey PRIMARY KEY(id); 
ALTER TABLE 
db=> \d contractor_contractor 
Table "public.contractor_contractor" 
Column | Type | Modifiers 
--------+---------+----------- 
id  | integer | not null 
Indexes: 
    "commerce_contractor_pkey" PRIMARY KEY, btree (id) 
+1

请记住,索引的名称和约束名称不一定相同(尽管通常情况如此) –

+0

相同的表名可以出现在单个数据库的多个模式中。 –

+0

@ MikeSherrill'CatRecall'好点。在'table_catalog'列添加了一个条件来解决这个问题。 – Mureinik