Maison >base de données >tutoriel mysql >Comment puis-je mettre à jour efficacement les lignes d'une table Postgres à partir d'un fichier CSV ?

Comment puis-je mettre à jour efficacement les lignes d'une table Postgres à partir d'un fichier CSV ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-15 08:29:45289parcourir

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

Optimisation des mises à jour Postgres avec des données CSV

La mise à jour efficace des tables Postgres avec les données provenant de fichiers CSV est cruciale pour la gestion des données. Disons que vous avez un tableau (id, banane, pomme) et un fichier CSV avec des valeurs banana mises à jour. Le défi est de mettre à jour uniquement la colonne banana sans modifier la colonne apple.

Tirer parti de COPY et UPDATE pour des mises à jour efficaces

L'approche optimale consiste à utiliser COPY pour importer le CSV dans une table temporaire, puis à effectuer un UPDATE basé sur la colonne id. Voici le processus :

<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>

Pour une approche plus rationalisée lorsque la structure de la table temporaire reflète la table cible :

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

Cela crée une table temporaire vide avec le même schéma que tbl, en omettant les contraintes.

Considérations relatives à la sécurité et aux performances

Avant Postgres 11, COPY nécessitait des privilèges de superutilisateur. Cependant, Postgres 11 et versions ultérieures proposent des rôles prédéfinis (comme pg_read_server_files et pg_write_server_files) pour une sécurité améliorée.

La psql méta-commande copy offre une autre solution, exécutant la commande COPY localement, contournant ainsi les exigences de privilèges de superutilisateur.

Pour les fichiers CSV volumineux, l'optimisation des performances est essentielle. Pensez à augmenter temporairement le paramètre temp_buffers. La création d'un index sur la colonne id de la table temporaire et l'exécution de ANALYZE peuvent encore améliorer la vitesse des requêtes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn