Ver Mensaje Individual
  #8 (permalink)  
Antiguo 17/11/2009, 18:07
Avatar de xdrtas
xdrtas
 
Fecha de Ingreso: junio-2008
Ubicación: Venezuela
Mensajes: 97
Antigüedad: 16 años, 5 meses
Puntos: 13
Respuesta: bash para insertar o actualizar en una base de datos

Hace tiempo que no me meto con scripts de bash, sin embargo, he hecho cosas parecidas y en teoría debería funcionar, te pongo un ejemplo que hice con un archivo BAT bajo windows que funciona perfectamente, y si funciona bajo windows, funciona bajo Linux/Unix:

Hice dos archivos
  1. Archivo TXT con la/s consultas, le puse el nombre de sql.txt.
    Código:
    INSERT INTO "Album" ("alb_ID", "alb_Titulo", "alb_Fecha", "alb_Descripcion") VALUES (nextval('"Album_alb_ID_seq"'), 'Titulo','17/11/2009'::date, 'Prueba bash');
    SELECT * FROM "Album";
    
  2. Archivo BAT para ejecutar el archivo, le puse de nombre sql.bat.
    Código:
    @echo off
    psql -d aikido -U postgres -f sql.txt
    

El archivo BAT está en el mismo directorio donde se encuentra la aplicación psql.

Ahora desde linux: si quieres ejecutar el sript de bash desde otra ruta, tendrías que usar el comando "cd" de linux para ubicarte, ejemplo:
Código:
#!/bin/bash
cd /etc/postgreSQL/bin/psql -d aikido -U postgres -f sql.txt
Si no quieres ejecutar la consulta desde un archivo externo, tienes la posibilidad de hacer lo siguiente:
Código:
#!/bin/bash
cd /etc/postgreSQL/bin/psql -d aikido -U postgres -c "INSERT INTO ""Album"" (""alb_ID"", ""alb_Titulo"", ""alb_Fecha"", ""alb_Descripcion"") VALUES (nextval('""Album_alb_ID_seq""'), 'Titulo','17/11/2009'::date, 'Prueba bash');"
El parámetro -f es para ejecutar las consultas almacenadas en un archivo y -c es para ejecutar la sentencia SQL desde psql sin entrar en el entorno del mismo.

cualquier duda psql --help y te aparecen los comandos básicos.

P.D: Perodoname si cometí algún fallo con los comandos en Linux, es que ahora mismo no me acuerdo.

Espero que te sirva. Te aseguro que bajo windows funciona, así que es cuestión de probarlo en Linux, que estoy 99% seguro de que funciona Saludos.