Postgres 9.2版
如何将数据INSERT到表(表有单列“name”)非重复值,只有一个查询。 重复插入时没有Postgres错误。
例如,表有两行值:
AAA, BBB
我有数据字符串逗号分隔值:
'AAA,BBB,CCC'
我想创建INSERT查询,之后表中的执行数据将是树行:
AAA, BBB, CCC
Postgres 9.5有很好的INSERT参数“ON CONFLICT DO NOTHING”,但我的postgres版本不支持它。
答案 0 :(得分:0)
您可以尝试NOT EXISTS
构建:
db=# create table t(i int primary key);
CREATE TABLE
db=# with d(v) as (values(1),(2),(3))
insert into t select v from d;
INSERT 0 3
db=# with d(v) as (values(1),(2),(3),(4))
insert into t select v from d where not exists (select 1 from t where i =v);
INSERT 0 1
或使用带有exception
处理的plpgsql(对于atomicy)
答案 1 :(得分:0)
使用单个查询找到解决方案:
INSERT INTO table (name)
SELECT * FROM unnest(string_to_array('AAA,BBB,CCC', ',')) col
WHERE col NOT IN (SELECT name FROM table);