Postgres 9.2 INSERT从带有分隔值的字符串中跳过重复项

时间:2017-12-29 13:51:12

标签: postgresql-9.2

Postgres 9.2版

如何将数据INSERT到表(表有单列“name”)非重复值,只有一个查询。 重复插入时没有Postgres错误。

例如,表有两行值:

AAA, BBB

我有数据字符串逗号分隔值:

'AAA,BBB,CCC'

我想创建INSERT查询,之后表中的执行数据将是树行:

AAA, BBB, CCC

Postgres 9.5有很好的INSERT参数“ON CONFLICT DO NOTHING”,但我的postgres版本不支持它。

2 个答案:

答案 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);