postgres中的条件INSERT INTO语句

时间:2013-03-29 19:29:29

标签: database postgresql conditional-statements insert-into

我正在为模拟航空公司预订数据库编写预订程序,我真正想做的是这样的事情:

IF EXISTS (SELECT * FROM LeadCustomer 
    WHERE FirstName = 'John' AND Surname = 'Smith') 
THEN
   INSERT INTO LeadCustomer (Firstname, Surname, BillingAddress, email) 
   VALUES ('John', 'Smith', '6 Brewery close,
            Buxton, Norfolk', cmp.testing@example.com');

但Postgres不支持IF语句而不加载PL / pgSQL扩展。我想知道是否有办法做一些相当于这个或者在这一步中是否需要进行一些用户交互?

2 个答案:

答案 0 :(得分:60)

这个特定的命令可以这样做:

insert into LeadCustomer (Firstname, Surname, BillingAddress, email)
select 
    'John', 'Smith', 
    '6 Brewery close, Buxton, Norfolk', 'cmp.testing@example.com'
where not exists (
    select * from leadcustomer where firstname = 'John' and surname = 'Smith'
);

它将插入select语句的结果,如果该客户不存在,select将只返回一行。

答案 1 :(得分:2)

  

使用INSERT ... ON CONFLICT DO UPDATE ...

包含9.5版本的pgsql upsert

以下答案已不再适用。 Postgres 9.5在几年后发布,提供了更好的解决方案。

Postgres在没有添加新功能的情况下没有“upsert”功能 您需要做的是运行select查询并查看是否有匹配的行。如果你这样做,那么插入它。

我知道你完全不想要一个upsert,但它几乎是一样的。