仅向 PostgreSQL 添加非重复值 table

Only adding non-duplicate values to PostgreSQL table

我想知道避免 PostgreSQL 数据库内部重复的最佳做法是什么 table。 table 中的行等同于来自第三方 API 的条目,该第三方在一天中多次调用。

我只添加与 JSON 响应不重复的条目。 JSON 响应可以超过数据库中的 500 个对象,比方说:

[{
  "unique_id": 1234,
  "name": "A",
  "wins": 1
},
{
  "unique_id": 1235
  "name": "B",
  "wins": 1
}, 
... 
];

问题是来自 API 的数据可能是我已经存储在数据库中的数据,当我再次查询第 3 方端点时,我不想再次添加已插入的数据 - 只有结果中的唯一对象。

而且我知道如何检查一个单独的对象是否作为一行存在,但是当我在第 3 方响应中有超过 500 个并且其中只有 50 个是唯一的时,合理的检查是什么为此在一个数据库事务中?

我很想 SELECT * FROM table_name,将这些结果添加到 json 响应中,然后以这种方式删除重复项,但这似乎是一个非常多的开销处理。

如有任何帮助,我们将不胜感激。

一个简单的方法是声明一个引用 table 中相关列的唯一约束(或唯一索引,或主键)。您可以在 insert 查询中使用 on conflict do nothing 子句:

示例:

create table mytable(unique_id int, name text, wins int);
create unique index myidx on mytable(unique_id, name, wins);

insert into mytable (unique_id, name, wins) 
values(1234, 'A', 1)
on conflict(unique_id, name, wins) do nothing;

设置 UNIQUE constraint on the column that needs to be unique, and then insert with ON CONFLICT DO NOTHING(或 ON CONFLICT DO UPDATE,如果您不知道这是一个选项,但这是您真正想要做的)。