Importar archivo csv en psql db

Quiero importar archivo csv a psql db…

He buscado y probado con la copia, también se refirió https://www.commandprompt.com/ppbook/r23528 y la sintaxis que se utiliza es:

copy location from 'file.csv' with delimiters '\t' NULL as 'NULL' CSV;

Nota : Mi archivo csv delimitado por ‘ficha’ .

Después de la ejecución de la anterior cmd 1er tiempo, muestra :

ERROR:  syntax error at or near ""\t""
LINE 1: ...om 'file.csv' using delimiters "\t" ;

y para el 2do tiempo,

ERROR:  syntax error at or near "copy"
LINE 2: copy location from 'file.csv' using d... 

Después De La Edición,

2º tiempo traté de usar como ,

copy location from 'file.csv' with delimiter E'\t' NULL as 'NULL' CSV;

ERROR: extra data after last expected column 
CONTEXT: COPY location, line 1: "AD AD100   Canillo  42.5833    1.6667  6" 

Mi descripción de la tabla es

Table "public.location"

 Column    |          Type          | Modifiers 
-------------+------------------------+-----------
 countrycode | character varying(2)   | 
 postalcode  | character varying(20)  | 
 place       | character varying(100) | 
 state       | character varying(20)  | 
 country     | character varying(100) | 
 country2    | character varying(20)  | 
 community   | character varying(100) | 
 community2  | character varying(20)  | 
 latitude    | double precision       | 
 longitude   | double precision       | 
 accuracy    | integer                | 

cómo resolver esto?

De entrada:

AD      AD100   Canillo                                                 42.5833 1.6667  6
AD      AD200   Encamp                                                  42.5333 1.6333  6
AD      AD300   Ordino                                                  42.6    1.55    6
AD      AD400   La Massana                                                      42.5667 1.4833  6
AD      AD500   Andorra la Vella                                                        42.5    1.5     6
AD      AD600   Sant Julià de Lòria                                                     42.4667 1.5     6
AD      AD700   Escaldes-Engordany                                                      42.5    1.5667  6
AR      3636    "POZO CERCADO (EL CHORRO (F), DPTO. RIVADAVIA (S))"     SALTA   A                                       -23.4933        -61.9267        3
AR      4123    LAS SALADAS     SALTA   A                                       -25.7833        -64.5   4
AR      4126    LA MARAVILLA    SALTA   A                                       -26.0833        -65.263 3
AR      4126    TALA    SALTA   A                                       -26.1167        -65.2833        4
AR      4126    LA ASUNCION     SALTA   A                                       -26.0833        -65.263 3
AR      4126    BRETE   SALTA   A                                       -26.0667        -65.3667        4
AR      4126    EL SUNCHAL      SALTA   A                                       -26.0833        -65.263 3
AR      4126    CEIBAL  SALTA   A                                       -26.1   -65.0167        4
AR      4126    BARADERO        SALTA   A                                       -26.0833        -65.263 3
AR      4126    CANDELARIA      SALTA   A                                       -26.1   -65.1   4
AR      4126    ALEM    SALTA   A                                       -26.0833        -65.263 3
AR      4126    EL BRETE        SALTA   A                                       -26.0667        -65.3667        4
AR      4126    EL CUIBAL       SALTA   A                                       -26.0833        -65.263 3
AR      4126    EL JARDIN       SALTA   A                                       -26.0833        -65.3833        4
AR      4126    OVEJERO SALTA   A                                       -26.0833        -65.263 3
AR      4126    LOS MOGOTES     SALTA   A                                       -26.0333        -65.2   4
AR      4126    "MIRAFLORES (TALA, DPTO. CANDELARIA)"   SALTA   A                                       -26.0833        -65.263 3

Esto es cierto, por ejemplo, para la entrada…

cuando yo abra este archivo en ms xcel hoja, con delimitador de ficha , que separa los datos correctamente a la correspondiente columna..

archivos de entrada con la ficha y los valores null,

AD\tAD100\tCanillo\t\n\t\n\t\n\t\n\t\n\t\n\t42.5833\t1.6667\t6
AD\tAD200\tEncamp\t\n\t\n\t\n\t\n\t\n\t\n\t42.5333\t1.6333\t6
AR\t3636\t"POZO CERCADO (EL CHORRO (F), DPTO. RIVADAVIA (S))"\tSALTA\tA\t\n\t\n\t\n\t\n\t-23.4933\t-61.9267\t3

1 Kommentar

  1. 5

    Por la documentación en el COPY declaración, debe ser WITH DELIMITER y no DELIMITADORES.

    También, COPY sintaxis había cambiado y se le anima a utilizar la siguiente:

    COPY location FROM 'file.csv' WITH (FORMAT csv, DELIMITER '\t',  NULL 'NULL');

    EDICIÓN:

    He utilizado la información suministrada, para probar cómo COPY trabajará en la presentación de los datos:

    CREATE TABLE atest (
        countrycode text CHECK (length(countrycode) <= 2),
        postalcode  text CHECK (length(postalcode) <=20), 
        place       text CHECK (length(place) <= 100), 
        state       text CHECK (length(state) <= 20), 
        country     text CHECK (length(country) <= 100), 
        country2    text CHECK (length(country2) <= 20), 
        community   text CHECK (length(community) <= 100), 
        community2  text CHECK (length(community2) <= 20),
        latitude    double precision,
        longitude   double precision,
        accuracy    integer);

    He usado el mencionado comando (aprobado un poco):

    COPY atest FROM '/Users/viy/atest2.csv'
         WITH (FORMAT csv, DELIMITER E'\t',  NULL '\n'); 

    Y tiene el mismo error como se describió anteriormente. Se espera que esto, porque hay demasiados campos vacíos. Echemos un vistazo a la CSV de datos y cómo los partidos de definición de la tabla (todos los \t reemplazado con nuevas líneas):

    AD       countrycode
    AD100    postalcode
    Canillo  place
    \n       state
    \n       country
    \n       country2
    \n       community
    \n       community2
    \n       latitude
    42.5833  longitude
    1.6667   accuracy
    6        <-- this one gives the error!

    Así, con el fin de obtener los datos cargados tienes que revisar tus datos de origen y quitar un extra de campo vacío en el medio. Otra forma es para ajustar la tabla de definición de partido que la fuente de datos.

    • Gracias por tu respuesta, esto podría ser útil para postgres 9.1.4 , estoy usando postgres 8.3 , como usted ha dicho que he cambiado mi sintaxis como la ubicación de la copia de archivos’.csv’ con delimitador E’\t’ NULO ‘NULL’ CSV; ERROR: datos adicionales después de la última columna esperado CONTEXTO: ubicación de la COPIA, de la línea 1: «AD AD100 Canillo 42.5833 1.6667 6» cómo resolver esto?
    • por favor, incluya la definición de la tabla en el post (el uso de postgresql s `\d+ <table_name> comando).
    • Columna | Tipo | Modificadores ————-+————————+———– código del país | character varying(2) | código postal | character varying(20) | lugar | character varying(100) | estado | character varying(20) | país | character varying(100) | estudios monográficos sobre países2 | character varying(20) | comunidad | character varying(100) | community2 | character varying(20) | latitud | de doble precisión | longitud | de doble precisión | exactitud | integer |
    • por favor, edita tu pregunta e incluir esta información con la debida como una pieza de código para la sangría adecuada.
    • realmente parece que su línea no coincide con su definición de la tabla. O a que no nos contó toda la historia.
    • en el archivo csv , algunas líneas se han null datos .. como la primera línea de «AD AD100 Canillo 42.5833 1.6667 6» no contiene el estado , el país, estudios monográficos sobre países2, de la comunidad , community2
    • Lo que yo veo. Pero no debe ser tab personajes entre los campos existentes, sin embargo. Yo no les veo. Podría publicar aquí un ejemplo de su archivo de entrada con el literal \t (es decir, ` followed by a t) for tabs and \N` (2 caracteres) para valores nulos, por favor?
    • No puedo probar, porque todas las pestañas se convierten en espacios.
    • Podría publicar aquí un ejemplo de su archivo de entrada con el literal \t (es decir, \ seguido por un t) para las pestañas y \N (2 caracteres) para valores nulos, por favor?

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea