【发布时间】:2012-10-12 09:03:50
【问题描述】:
我使用的是 PostgreSQL 9.1。
我有一个表common.client_contact,我在其中使用以下代码创建了外键:
ALTER TABLE common.client_contact
ADD FOREIGN KEY (contact_id) REFERENCES common.contact_item(id);
如果我执行这段代码,我会得到几个不同名字的外键(比如client_contact_contact_id_fkey1、client_contact_contact_id_fkey2、client_contact_contact_id_fkey3等等)。
所以,在创建新约束之前,我需要检查它是否存在。
我检查pg_constraint表中是否存在这个约束:
SELECT * FROM pg_constraint WHERE conname = 'client_contact_contact_id_fkey'
现在我需要将它们组合在一起。类似的东西
IF NOT EXISTS
(SELECT * FROM pg_constraint WHERE conname = 'client_contact_contact_id_fkey')
ALTER TABLE common.client_contact
ADD CONSTRAINT client_contact_contact_id_fkey
FOREIGN KEY (contact_id) REFERENCES common.contact_item(id)
或者只是
ALTER TABLE common.client_contact
ADD FOREIGN KEY IF NOT EXISTS (contact_id) REFERENCES common.contact_item(id)
但是这两个查询都会产生语法错误。那么,我该如何在 PostgreSQL 中做到这一点呢?
【问题讨论】: