データのインポート
コピーコード>
一時的なステージングテーブルへのすべて 新しいタイトルのみをターゲットテーブルに挿入します。
CREATE TEMP TABLE tmp(title text);
COPY tmp FROM 'path/to/file.csv';
ANALYZE tmp;
INSERT INTO tbl
SELECT DISTINCT tmp.title
FROM tmp
LEFT JOIN tbl USING (title)
WHERE tbl.title IS NULL;
IDは、 serial
を使用して自動的に生成する必要があります 列tbl_id
tbl
で 。
LEFT JOIN
/ IS NULL
コンストラクトは、既存のタイトルを失格にします。 存在しません
別の可能性があります。
DISTINCT
一時テーブルtmp
の受信データの重複を防ぎます 。
ANALYZE
クエリプランナーが適切なプランを選択し、一時テーブルが自動バキュームによって分析されないようにするのに役立ちます。
300万個のアイテムがあるので、 temp_buffer
の設定を上げるとお金がかかる場合があります (このセッションのみ ):
SET temp_buffers = 1000MB;
または、いくら余裕があり、一時テーブルをRAMに保持するのに十分であり、はるかに高速です。注:最初に実行する必要があります セッション中-一時オブジェクトが作成される前。
IDを取得する
インポートされたデータのすべてのIDを表示するには:
SELECT tbl.tbl_id, tbl.title
FROM tbl
JOIN tmp USING (title)
同じセッションで!一時テーブルは、セッションの終了時に自動的に削除されます。