Necesito automatizar una tarea de inserción en una base de datos postgresql desde linea de comando con psql , pero ejecutada a una determinada hora y día, programando por ejemplo un cron.
Para esto me he creado el archivo sql (basta con añadir el código que queramos al archivo y salvarlo con la extensión .sql) con la sentencia sql que necesito ejecutar, y lo necesito ejecutar desde psql , con la sentencia psql < archivo.sql -U . Cuando ejecuto esto, me pide siempre el password del usuario de la base de datos, no hay problema si lo hiciera una única vez, pero como esta operación la quiero realizar automáticamente desde un script bash programado en el crontab de linux debo automatizar el envío del password.
Para realizar esto lo más cómodo que he encontrado es generar un archivo llamado pgpass que contenga la cadena de conexión. Lo necesito que se ejecute como variable de entorno y se almacene en la raiz de mi usuario linux. Para realizar esta tarea puedo generarla con la siguiente sentencia:
echo “[direccionip]:[port]:[database_name]:[usuario]:[password]” >> ~/.pgpass
Una vez lanzada esta instrucción se genera automáticamente el archivo .pgpass, y posteriormente se deberá otorgarle permisos a este archivo (me pide el 0600) . Seguramente si ejecutáramos lo que necesitamos la variable de entorno no tenga efecto, hay que recordar que para que tome efecto la variable de entorno, como siempre lo mejor es salir de la sesión desde la que nos encontremos ejecutando la sentencia y volvamos a entrar.
Tras realizar esta operación ya se puede ejecutar psql automáticamente sin que se nos pida una contraseña de ningún usuario, y de esta manera se podría realizar automáticamente desde un script bash.
Fuente donde encontré la información que me sirvió:
http://www.damianculotta.com.ar/2008/08/26/automatizar-backups-de-postgresql