Estoy teniendo problemas exportar mi PostgreSQL salida desde una shell a un archivo csv.
Mi secuencia de comandos SQL que se llama script.sql.

He escrito el siguiente comando en mi concha:

psql congress -af script.sql &> filename.csv

Pero cuando abrí la filename.csv archivo, los valores de todas las columnas se apretó en una columna en el csv de Excel (véase la captura de pantalla adjunta).

Entonces traté de otra manera. He editado mi script.sql ser:

Copy (Select * From ...) To '/tmp/filename.csv' With CSV;

A continuación, escribir el siguiente comando en el shell dentro de la base de datos dbname.

\i script.sql

La salida es:

COPY 162

Bien, mi salida de la consulta tiene 162 filas.

Por lo que el 162 filas de mi tabla de salida ha sido copiado en el de la cáscara. ¿Cómo puedo pegar o mover a un archivo csv?

O, si voy a usar el nombre de archivo.csv (captura de pantalla adjunta), ¿cómo puedo arreglar el formato de csv/Excel archivo?

Cómo exportar una PostgreSQL resultado de la consulta a un archivo csv

al abrir el archivo en Excel u otro programa por igual, cambiar el delimitador ‘|’
stackoverflow.com/questions/8119297/…
Vea la más completa respuesta aquí, que aclara \copy (client-side) de COPY (lado del servidor) consultas en psql: stackoverflow.com/questions/1517635/…

OriginalEl autor mflowww | 2015-03-22

3 Comentarios

  1. 30

    Moderna sintaxis:

    COPY (SELECT * FROM ...) TO '/tmp/filename.csv' (format CSV);

    Por lo que el 162 filas de mi tabla de salida ha sido copiado en el de la cáscara. ¿
    puedo pegar o mover a un archivo csv?

    El resultado es el archivo CSV. Abre cualquier programa de hoja de cálculo utilizando la coincidencia de los delimitadores. Por la documentación:

    El valor predeterminado es un carácter de tabulación en formato de texto, una coma en formato CSV

    Como Patrick comentó, puede utilizar el correspondiente psql meta comando \copy en una manera similar. Se escribe (y se lee) archivos locales para el cliente y no requiere privilegios de superusuario.

    Más explicación en estas respuestas:

    muchas gracias!
    COPY requiere que usted sea un superusuario. \copy puede ser utilizado por usuarios regulares y parecía tener la misma sintaxis
    de esta forma se ignora en los encabezados de salida por defecto?
    sí. Si desea que el encabezado, solo uso (formato CSV, el ENCABEZADO)

    OriginalEl autor Erwin Brandstetter

  2. 0

    primera copia de su información de conexión en ~/.pgpass y

    cat ip:port:dbname:user:pass > ~/.pgpass
    chmod 0600 ~/.pgpass
    psql -h serverip -U userid dbname -af test.sql | gzip > result.txt.gz

    OriginalEl autor Ash

  3. 0

    Saliéndose un poco de la tangente, no hay otra manera también.

    Yo uso la siguiente en un windows script por lotes: –

    psql.exe -U %cUser% -h %cHost% -p %cPort% -d %cDB% -t -o "%dumpDir%\tables.txt" -A -c "SELECT table_schema, table_name   FROM information_schema.tables WHERE table_schema = '%qSchema%';"

    El truco es recordar la opción-a. Se suprime el espacio en blanco de relleno de los datos.

    Hago esto para evitar el permiso de errores de la COPIA de comando que se muestra arriba con la cuenta que ejecuta el postgress no tienen los mismos permisos que la cuenta que ejecuta mi programadas archivo de proceso por lotes.

    Esto me pone una lista de las tablas de un esquema dado con resultados como:-

    myschema|mytable1

    myschema|mytable2

    Yo, a continuación, utilice el comando de proceso por lotes para procesar cada línea. Si REALMENTE quería un archivo CSV, todo lo que tendría que hacer sería este:-

    ECHO table_schema,table_name > %dumpDir%\tables.csv
    FOR /F "delims=|" %%p in (%dumpDir%\tables.txt) DO echo %%p,%%q >> %dumpDir%\tables.csv

    Probablemente no es el más eficiente de los mecanismos, pero funciona bien en un pequeño número de filas de salida.

    Me gusta psql -c 'select * from table limit 5' -tAF, que produce automáticamente csv.

    OriginalEl autor Darren Gill

Dejar respuesta

Please enter your comment!
Please enter your name here