我正在研究一个发布DDL的程序.我想知道是否CREATE TABLE可以回滚和类似的DDL
描述每个数据库如何使用DDL处理事务.
我正在使用PostgreSQL 9.1.
我有一个表common.client_contact,我使用此代码创建外键:
ALTER TABLE common.client_contact
ADD FOREIGN KEY (contact_id) REFERENCES common.contact_item(id);
Run Code Online (Sandbox Code Playgroud)
如果我执行这个代码,我会用不同的名称(如一些外国键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'
Run Code Online (Sandbox Code Playgroud)
现在我需要将它们组合在一起.就像是
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)
Run Code Online (Sandbox Code Playgroud)
要不就
ALTER TABLE common.client_contact
ADD FOREIGN KEY IF NOT EXISTS (contact_id) REFERENCES common.contact_item(id)
Run Code Online (Sandbox Code Playgroud)
但是这两个查询都会产生语法错误.那么,我怎么能在PostgreSQL中做到这一点?