J'exécute cette commande:
COPY XXX FROM 'D:/XXX.csv' WITH (FORMAT CSV, HEADER TRUE, NULL 'NULL')
Dans Windows 7, il importe avec succès des fichiers CSV de moins de 1 Go.
Si le fichier fait plus de 1 Go, j'obtiens une "erreur inconnue".
[Code: 0, SQL State: XX000] ERROR: could not stat file "'D:/XXX.csv' Unknown error
Comment puis-je résoudre ce problème?
https://github.com/MIT-LCP/mimic-code/issues/49 alistairewj a commenté le 3 novembre 2018 • ► modifié
D'accord, le fichier stat n'a pas pu être "CHARTEVENTS.csv": une erreur inconnue est en fait un bogue dans PostgreSQL 11. Sous le capot, il appelle fstat () pour s'assurer que le fichier n'est pas un répertoire, et malheureusement fstat () est un programme 32 bits qui ne peut pas gérer de gros fichiers comme les chartevents. J'ai testé la version sur Windows avec PostgreSQL 10.5 et je n'ai pas eu cette erreur, donc je pense que c'est assez nouveau.
La meilleure solution consiste à conserver les fichiers compressés (c'est-à-dire à les conserver en tant que fichiers .csv.gz) et à utiliser 7Zip pour charger les données directement à partir des fichiers compressés. Lors des tests, cela semblait toujours fonctionner. Il y a un tutoriel assez détaillé sur la façon de le faire ici: https://mimic.physionet.org/tutorials/install-mimic-locally-windows/
La brève version ci-dessus est que vous conservez les fichiers .csv.gz, vous ajoutez le binaire 7Zip à votre chemin d'environnement Windows, puis vous appelez le fichier postgres_load_data_7Zip.sql pour charger les données. Vous pouvez utiliser le fichier postgres_checks.sql après tout pour vous assurer que vous avez correctement chargé toutes les données.
edit: Pour votre erreur ultérieure, lorsque vous utilisez cette approche 7Zip, je ne sais pas pourquoi elle ne se charge pas. Essayez de retélécharger uniquement le fichier ADMISSIONS.csv.gz et de voir s'il vous renvoie toujours la même erreur. Peut-être qu'il y a une nouvelle version de 7Zip qui me demande de mettre à jour le script ou quelque chose!
Pour toute autre personne qui a googlé ce message d'erreur Postgres après avoir tenté de travailler avec un fichier> 1 Go dans Postgres 11, je peux confirmer que la réponse de @ @ 吴 ci-dessus est parfaite. C'est en effet un problème de taille.
J'ai cependant essayé une approche différente de celle de @ 亚军 吴 et @ Loren: j'ai simplement désinstallé Postgres 11 et installé la version stable de Postgres 10.7. (Je suis sur Windows 10, au fait, au cas où cela compte.)
J'ai réexécuté le code d'origine qui avait provoqué l'erreur et le tour est joué, quelques minutes plus tard, j'avais rempli un nouveau tableau avec les données d'un fichier csv de taille moyenne (~ 3 Go). J'ai d'abord essayé d'utiliser CSVSplitter, par @Loren, qui fonctionnait bien jusqu'à ce que j'arrive à manquer d'espace de stockage sur ma machine. (Merci, Battlefield 5.)
Dans mon cas, il n'y a rien dans PGSQL 11 sur lequel je me basais qui n'était pas dans la version 10.7, donc je pense que cela pourrait être une bonne solution pour toute autre personne qui rencontre ce problème. Merci à tous ceux ci-dessus pour leur contribution, en particulier au PO pour avoir publié ceci en premier lieu. J'ai guéri un énorme, énorme mal de tête!
Vous pouvez contourner ce problème en redirigeant le fichier via un programme. Par exemple, je viens de l'utiliser pour copier à partir d'un fichier de 24 Go sur Windows 10 et PostgreSQL 11.
copy t(c,d) from program 'cmd /c "type x:\path\to\file.txt"' with (format text);
Ceci copie le fichier texte file.txt
dans le tableau t
, les colonnes c
et d
.
L'astuce consiste à exécuter cmd
dans un seul mode de commande, avec /c
et lui dire de type
sortir le fichier en question.
Avec pgAdmin et AWS, j'ai utilisé CSVSplitter pour diviser en fichiers de moins de 1 Go. Lame, mais a fonctionné. L'importation pgAdmin s'ajoute à la table existante. (Changement du caractère d'échappement de 'à "afin d'éviter les erreurs dues au texte non cité dans le fichier source. En général, j'applique des guillemets dans LibreOffice, mais ces fichiers étaient trop gros pour être ouverts.)
Il semble que ce ne soit pas un problème de base de données, mais un problème de psql/pgadmin. La solution de contournement utilise un logiciel d'administration des versions précédentes de psql:
J'espère que cela aide toute personne rencontrant le même problème.