如果不存在则插入行 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:如果值存在,则对行进行更新,如果值不存在,则插入 [重复]

数据库:如果存在则“更新”如果不存在则插入 [重复]

HSQLDB 如果不存在则插入,如果存在则更新

如果存在则增加行上的字段,否则插入新行

Postgres 如果不存在则插入多行,如果存在或插入则返回所有 id,然后使用所有 id 插入另一个表

如果不存在则插入数据的过程pl sql