|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Nouveau Membre du Club
![]() Inscription : avril 2006 Messages : 71 ![]() |
Bonjour à tous,
Jusqu’à présent, je pouvais téléverser des fichiers (environ 100 000 lignes) directement dans ma base de données, en lançant la commande COPY sur un fichier CSV, grâce à psql : Code :
copy matable (column1, column2, column3, … columnN) FROM 'monfichier.csv' delimiter ',' csv header Que me reste-t-il comme solution pour importer massivement des données à partir de PHP ? Générer une méga-requête avec PHP ? Un massif Code :
Quelle est la limite théorique de ce genre d’insertions par lot ? Y a-t-il une meilleure méthode ? Config : PostgreSQL 8.4, sur serveur Apache (Ubuntu). Merci d’avance. |
||
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : octobre 2008 Messages : 1 702 ![]() |
L'interface non-PDO de php permet de faire du COPY avec pg_copy_from et pg_copy_to
|
|
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Inscription : avril 2006 Messages : 71 ![]() |
Merci pour la réponse.
Toutefois pg_copy_from fait une copie à partir d’une table, pas à partir d’un fichier. C’est quand même mieux que la solution que j’avais en tête, car je peux importer un fichier dans une table avec la commande file, mais 100 000 entrées en mémoire avant de les insérer dans la base, ça me semble un peu volumineux, surtout que le chiffre 100 000 pourrait éventuellement décupler. Quelqu’un a une meilleure solution ? |
|
|
00
|
|
|
#4 | |||
![]() ![]() Inscription : octobre 2008 Messages : 1 702 ![]() |
Citation:
Code :
|
|||
|
|
00
|
|
|
#5 |
![]() ![]() Inscription : octobre 2008 Messages : 1 702 ![]() |
Autre méthode: la commande que tu cites initialement est COPY c.a.d une commande SQL et non pas une commande spécifique psql, sinon ce serait \copy.
En fait la commande COPY est accessible aussi en php via pg_query() comme n'importe quelle autre commande SQL. Elle implique simplement que le fichier va être ouvert par le serveur postgres lui-même, donc il faut qu'il lui soit accessible avec ses droits à lui. Mais si cette partie-là fonctionnait déjà avant, pas de raison qu'elle ne fonctionne plus même sans psql. |
|
|
00
|
|
|
#6 |
|
Nouveau Membre du Club
![]() Inscription : avril 2006 Messages : 71 ![]() |
Bonsoir,
Je crains d’avoir été imprécis. C’est la commande \copy que j’utilisais avec psql et non COPY. La commande COPY FROM a été restreinte dans PostgreSQL (qui me disait justement d’utiliser psql \copy, mais à présent que exec est proscrit aussi, ça complique l’affaire). Je vais voir demain si COPY FROM marchera avec pg_query. (Le commentaire de la doc semble dire que oui… c’est curieux…). Quoi qu’il en soit, merci pour l’aide. |
|
|
00
|
|
|
#7 |
![]() ![]() Inscription : octobre 2008 Messages : 1 702 ![]() |
c'est COPY FROM fichier qui est réservé aux profils postgres "superuser", mais pas COPY FROM STDIN qui est d'ailleurs la commande utilisée en sous-main par le \copy de psql.
|
|
|
00
|
|
|
#8 |
|
Nouveau Membre du Club
![]() Inscription : avril 2006 Messages : 71 ![]() |
Merci beaucoup pour ton aide et les précisions fort utiles.
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com