我必须将大量数据从文件转储到 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(使用前将#替换为@)