Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

355
Visualizações
Usando AWK y COPY FROM PROGRAM de PostgreSQL juntos

Tengo un archivo .dat que consta de miles de líneas, donde cada línea está formada por 4 conjuntos de números, delimitados por :: . Termina luciendo algo como esto:

 1234::482::4::1342.5321234 4342::532::1::1532.532431

Estoy tratando de copiar este archivo en una tabla de Postgres usando COPIAR DEL PROGRAMA. Por cierto, estoy usando PostreSQL 9.5. La razón por la que trato de usar la opción PROGRAMA es porque solo necesito los 3 primeros grupos de números de cada línea. Descubrí que puedo usar el comando awk para imprimir lo que quiero copiar en la terminal awk -F '::' '{print $1, $2, $3}' my_file.dat así que pensé que podría pasar ese comando awk a COPIAR DEL PROGRAMA y tener los primeros 3 grupos de números importados a la tabla de mi base de datos, que solo tiene 3 columnas.

Sin embargo, cuando trato de usar este comando con COPY FROM, sigo recibiendo errores. Intento ejecutar lo siguiente en psql

COPY my_table FROM PROGRAM 'awk -F ''::'' ''{print $1''%''$2''%''$3}'' my_file.dat' delimiter '%';

pero sigue recibiendo un error: ERROR: program "awk -F '::' '{print $1'%'$2'%'$3}' my_file.dat" failed DETAIL: child process exited with exit code 2 . He probado todo tipo de variaciones diferentes de esto con diferentes delimitadores, pero por mi vida no puedo averiguar dónde me estoy equivocando. ¿Estoy malinterpretando lo que puede hacer COPY FROM PROGRAM? ¿O me estoy perdiendo algo?

No puedo crear un archivo nuevo en mi sistema, por lo que no puedo ejecutar un comando para filtrar el archivo y crear uno nuevo con el formato deseado. Necesito poder escribir esto en una línea de código SQL, y pensé que COPIAR DESDE EL PROGRAMA era en realidad una forma genial de hacerlo, pero no puedo hacer que funcione.

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Si awk devuelve un conjunto de resultados adecuado, puede intentar importarlo utilizando STDIN (Entrada estándar) de COPY en lugar de ejecutar awk desde dentro de PostgreSQL, por ejemplo.

 awk -F "::" '{print $1"%"$2"%"$3}' ratings_copy.dat | psql -d db "COPY my_table FROM STDIN"

Este comando toma el resultado de awk y lo canaliza a psql , que luego puede ser leído por COPY FROM . Otra opción es usar \copy ;-)

over 4 years ago · Santiago Trujillo Relatório

0

En awk, el código de salida 2 podría significar que no pudo abrir el archivo de entrada. Lo cual tiene sentido, ya que COPY está buscando el archivo en el lado del servidor, en el directorio de trabajo actual del proceso del servidor, que probablemente no es donde se encuentra el archivo. Use \copy en su lugar para buscar el archivo en el directorio de trabajo actual de psql. El mensaje de error real generado por awk debe encontrarse en el archivo de registro del servidor de la base de datos (cuando se usa con COPY; cuando se usa con \copy, debe aparecer en el stderr de psql).

¿Por qué no ejecutar el comando awk que ya había probado, en lugar de crear uno nuevo sin probar?

 \COPY my_table FROM PROGRAM 'awk -F ''::'' ''{print $1,$2,$3}'' my_file.dat' delimiter ' '
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda