【发布时间】:2017-05-16 19:07:00
【问题描述】:
我想在 Postgres 9.6 的 PL/pgSQL 函数中做这样的事情:
INSERT INTO table1 (id, value) VALUES (1, 'a') ON CONFLICT DO NOTHING;
--- If the above statement didn't insert a new row
--- because id of 1 already existed,
--- then run the following statements
INSERT INTO table2 (table1_id, value) VALUES (1, 'a');
UPDATE table3 set (table1_id, time) = (1, now());
但是,我不知道如何确定第一个 INSERT 是否实际插入了新行,或者 ON CONFLICT DO NOTHING 是否已完成。
在运行所有 SQL 语句之前,我可以在函数开头执行 SELECT 以查看 id 为 1 的记录是否存在于 table1 中,但我认为这会导致竞争条件。
【问题讨论】:
-
当你写 "Postgres function" 你的意思是
LANGUAGE plpgsql?还是LANGUAGE sql?请清楚,并始终添加您的 Postgres 版本。 -
感谢您的建议,以后会做。在这种情况下,它是
plpgsql和9.6。
标签: sql postgresql stored-procedures plpgsql sql-insert