我正在使用 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 中做到这一点?