如果不存在,则插入行postgresql

时间:2015-09-23 14:22:11

标签: postgresql

如果不存在于表中,我想在postgresql中插入一行。我的表格结构如下。

表名:test

id serial NOT NULL

单位整数

eventid integer

没有时区的date_time时间戳

我尝试了以下查询,但在Select附近给了我错误。

INSERT INTO test VALUES (905, 10, '2015-09-23 13:34:26')
SELECT 905, 10, '2015-09-23 13:34:26'
WHERE NOT EXISTS(
SELECT 1
FROM test
WHERE unitid = 905 AND eventid = 10 AND date_time = '2015-09-23 13:34:26'
);

请任何人给我一个很好的建议。我想要更快的方法来做到这一点。

1 个答案:

答案 0 :(得分:1)

您正在指定值,然后您将包含一个选择。您需要在没有insert into(...)的情况下编写values并使用您在那里的select代替。简单的例子

insert into items_ver
select * from items where item_id=2;

取自here。首先尝试您的选择。是

SELECT 905, 10, '2015-09-23 13:34:26'
WHERE NOT EXISTS(
SELECT 1
FROM test
WHERE unitid = 905 AND eventid = 10 AND date_time = '2015-09-23 13:34:26'
);

如果是这样,那么你应该有这样的插入:

INSERT INTO test
SELECT 905, 10, '2015-09-23 13:34:26'
WHERE NOT EXISTS(
SELECT 1
FROM test
WHERE unitid = 905 AND eventid = 10 AND date_time = '2015-09-23 13:34:26'
);