Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengemas Kini Baris dengan Cekap dalam Jadual Postgres daripada Fail CSV?

Bagaimanakah Saya Boleh Mengemas Kini Baris dengan Cekap dalam Jadual Postgres daripada Fail CSV?

Susan Sarandon
Susan Sarandonasal
2025-01-15 08:29:45287semak imbas

How Can I Efficiently Update Rows in a Postgres Table from a CSV File?

Mengoptimumkan Kemas Kini Postgres dengan Data CSV

Mengemas kini jadual Postgres dengan data daripada fail CSV dengan cekap adalah penting untuk pengurusan data. Katakan anda mempunyai jadual (id, pisang, epal) dan fail CSV dengan nilai banana yang dikemas kini. Cabarannya ialah untuk mengemas kini hanya lajur banana tanpa mengubah suai lajur apple.

Memanfaatkan COPY dan UPDATE untuk Kemas Kini Yang Cekap

Pendekatan optimum melibatkan penggunaan COPY untuk mengimport CSV ke dalam jadual sementara, kemudian melaksanakan UPDATE berdasarkan lajur id. Inilah prosesnya:

<code class="language-sql">CREATE TEMP TABLE tmp_x (id int, apple text, banana text); -- Or see alternative below

COPY tmp_x FROM '/absolute/path/to/file' (FORMAT csv);

UPDATE tbl
SET banana = tmp_x.banana
FROM tmp_x
WHERE tbl.id = tmp_x.id;

DROP TABLE tmp_x; -- Alternatively, it's automatically dropped at the end of the session</code>

Untuk pendekatan yang lebih diperkemas apabila struktur jadual sementara mencerminkan jadual sasaran:

<code class="language-sql">CREATE TEMP TABLE tmp_x AS SELECT * FROM tbl LIMIT 0;</code>

Ini mencipta jadual sementara kosong dengan skema yang sama seperti tbl, meninggalkan kekangan.

Pertimbangan Keselamatan dan Prestasi

Sebelum Postgres 11, COPY memerlukan keistimewaan superuser. Walau bagaimanapun, versi Postgres 11 dan yang lebih baru menawarkan peranan yang dipratentukan (seperti pg_read_server_files dan pg_write_server_files) untuk keselamatan yang dipertingkatkan.

Arahan meta psql copy menawarkan penyelesaian lain, melaksanakan perintah COPY secara setempat, sekali gus memintas keperluan keistimewaan pengguna super.

Untuk fail CSV yang besar, pengoptimuman prestasi adalah penting. Pertimbangkan untuk meningkatkan parameter temp_buffers buat sementara waktu. Mencipta indeks pada lajur id jadual sementara dan menjalankan ANALYZE boleh meningkatkan lagi kelajuan pertanyaan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengemas Kini Baris dengan Cekap dalam Jadual Postgres daripada Fail CSV?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn