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
- 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";
- 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.