イゴールの答えは私を大いに助けてくれましたが、ネイトがコメントで言及した問題にも遭遇しました。次に、おそらくここでの質問に加えて、新しいデータには内部的に重複が含まれているだけでなく、既存のデータとの重複も含まれているという問題がありました。私にとってうまくいったのは次のことでした。
CREATE TEMP TABLE tmp_table AS SELECT * FROM newsletter_subscribers;
COPY tmp_table (name, email) FROM stdin DELIMITER ' ' CSV;
SELECT count(*) FROM tmp_table; -- Just to be sure
TRUNCATE newsletter_subscribers;
INSERT INTO newsletter_subscribers
SELECT DISTINCT ON (email) * FROM tmp_table
ORDER BY email, subscription_status;
SELECT count(*) FROM newsletter_subscribers; -- Paranoid again
内部複製と外部複製の両方が で同じになりtmp_table
、DISTINCT ON (email)
パーツによってそれらが削除されます。はORDER BY
、目的の行が結果セットの最初に来るようにし、DISTINCT
それ以降のすべての行を破棄します。