如果不存在则插入行 postgresql
Posted
技术标签:
【中文标题】如果不存在则插入行 postgresql【英文标题】:Insert rows if not exist postgresql 【发布时间】:2015-09-23 14:22:11 【问题描述】:如果表中不存在,我想在 postgresql 中插入一行。我的表结构如下。
表名:测试
id 序列号不为空
unitid 整数
eventid 整数
没有时区的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】:您正在指定值,然后包含一个选择。您需要在没有 values
(...) 的情况下编写 insert into
并使用您那里的 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'
);
【讨论】:
非常感谢。这是最好的答案。性能方面,我有大约 100,000 个数据并在大约 22 毫秒内执行操作。非常感谢。以上是关于如果不存在则插入行 postgresql的主要内容,如果未能解决你的问题,请参考以下文章
MySQL:如果值存在,则对行进行更新,如果值不存在,则插入 [重复]