在 postgresql 中“复制自”期间忽略重复键

2024-02-04

我必须将大量数据从文件转储到 PostgreSQL 表中。我知道它不支持像 MySql 中那样的“忽略”“替换”等。网络上几乎所有与此相关的帖子都提出了相同的建议,例如将数据转储到临时表,然后执行“插入...选择...不存在的地方...”。

这在一种情况下没有帮助,即文件数据本身包含重复的主键。 有人知道如何在 PostgreSQL 中处理这个问题吗?

附:我正在通过 java 程序执行此操作,如果有帮助的话


使用与您描述的相同的方法,但是DELETE(或分组,或修改...)重复PK在加载到主表之前在临时表中。

就像是:

CREATE TEMP TABLE tmp_table 
ON COMMIT DROP
AS
SELECT * 
FROM main_table
WITH NO DATA;

COPY tmp_table FROM 'full/file/name/here';

INSERT INTO main_table
SELECT DISTINCT ON (PK_field) *
FROM tmp_table
ORDER BY (some_fields)

细节:CREATE TABLE AS http://www.postgresql.org/docs/current/static/sql-createtableas.html, COPY http://www.postgresql.org/docs/current/static/sql-copy.html, DISTINCT ON http://www.postgresql.org/docs/current/static/sql-select.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 postgresql 中“复制自”期间忽略重复键 的相关文章

随机推荐