ERRORE: dati mancanti per la colonna usando \copia in psql

Sto cercando di importare un .file txt in PostgreSQL. Il file txt è di 6 colonne:

Laboratory_Name Laboratory_ID   Facility    ZIP_Code     City   State

E 213 righe.

Sto cercando di utilizzare \copy a mettere il contenuto di questo file in una tabella denominata doe2 in PostgreSQL usando questo comando:

\copy DOE2 FROM '/users/nathangroom/desktop/DOE_inventory5.txt' (DELIMITER(' '))

Mi da questo errore:

missing data for column "facility"

Ho guardato tutto per cosa fare quando si verifica questo errore, e niente ha aiutato. Qualcun altro ha riscontrato questo?

  • Che cosa i dati del file? (Un paio di righe che vale la pena di esempio).

 

One Reply
  1. 6

    Tre possibili cause:

    1. Una o più righe del file ha solo 4 o meno i caratteri di spazio (il delimitatore).

    2. Uno o più caratteri spazio sono stati sfuggito (inavvertitamente). Magari con una barra rovesciata alla fine di un non quotate valore. Per l’ (default) text formato che si sta utilizzando, il manuale spiega:

      Caratteri di barra rovesciata (\) può essere utilizzato in COPY dati per citare i dati
      personaggi che, altrimenti, potrebbero essere prese come una riga o una colonna di delimitatori.

    Uscita da COPY TO o pg_dump non mostra uno qualsiasi di questi errori durante la lettura di una tabella con la corrispondenza del layout. Ma forse il tuo file è stato modificato o è diversa, difetti di origine?

    1. Non si sta utilizzando il file che si pensare si sta utilizzando. Il \copy meta-comando psql interfaccia della riga di comando è un wrapper per COPY e legge i file locali per la client. Se il file risiede sul server, utilizzare il comando SQL COPIA invece.
    • Io non credo che sia la prima perché ho cambiato il mio delimitatore ‘,’ e la stessa cosa è successa. Non penso sia la seconda perché non ho una barra rovesciata nella mia intero file (ho fatto una ricerca con ctrl-F). Se è il 3, non so come risolvere il problema. Cerco il comando COPIA in pgadmin GUI e ricevo questo errore: ERRORE: impossibile aprire il file “/users/nathangroom/desktop/DOE_inventory5.txt” per la lettura di: Permesso negato. Ho visto altrove su StackOverflow che utilizzando il \copia di comando nella shell di comando è stata la soluzione per questo errore.
    • Dove si trova il file? Dove si trova il server Postgres? Dove è il tuo cliente? Inoltre, non è possibile cambiare solo il delimitatore arbitrariamente. Deve essere quello utilizzato nel file. Che è? L’impostazione predefinita è un carattere di tabulazione in formato testo.
    • Il file è sul mio desktop, non so esattamente dove postgres server e il client sono, ma so che è tutto locale, sulla mia macchina. Il server dice che è localhost 5432. Ho provato di nuovo dopo il salvataggio in formato csv e ricevo questo errore: ERROR: invalid input sintassi integer: “Laboratory_ID” Che non ha senso perché c’è sicuramente un numero intero in quella colonna.
    • L’ultimo errore indica che è inclusa una riga di intestazione con il nome di ogni colonna, che è consentito in csv utilizzando il metodo dell’ HEADER opzione, ma non in (impostazione predefinita) in modalità di testo. Rimuovere la linea e provare di nuovo. Inoltre, se tutto ciò che è in esecuzione in locale, è possibile utilizzare \copy nonché COPY – accedono allo stesso file di sistema. Ma COPY è più restrittivo con le autorizzazioni.
    • Ciao, ho provato e ha eliminato l’errore, ma ora mi sto un nuovo errore, quella che ho avuto in origine: \copia DOE3 dall ‘/users/nathangroom/desktop/DOE_inventory2.csv ” (DELIMITATORE(‘,’)) ERRORE: dati mancanti per la colonna “Codice postale” CONTESTO: COPIA doe3, linea 1: “ROSSI,Ames Laboratory,1,Preparazione di Materiali Center”Tecnico Amministrative e di Servizi di Facility”
    • Questa risposta per me funziona. Ho avuto lo stesso errore e ho scoperto che il suggerimento è stato punto 1. Uno dei campi di dati in mio .csv conteneva una virgola a causa di errata conversione dallo strumento che aveva usato. Riconvertire i dati in formato csv con uno strumento migliore risolto il problema. Grazie!

Lascia un commento