仅向 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
,如果您不知道这是一个选项,但这是您真正想要做的)。
我想知道避免 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
,如果您不知道这是一个选项,但这是您真正想要做的)。