lunes, 23 de abril de 2018

Posibles problemas de Restauracion con Postgres

1. Varias versiones de Postgres en la máquina


A veces no salen las cosas porque hay mas de una versión de Postgres instalada.


  • Comprobamos la versión que hay en el PgAdmin y sale 9.6
  • Comprobamos la versión que sale de ejecutar psql -V y sale 9.5.1
Por tanto se debe de eliminar las versiones antiguas.

Para ello en Ubuntu, en base a este link listamos todos los paquetes de postgres con 

dpkg -l | grep postgres


Eliminamos aquellos paquete que no nos interesan con

sudo apt-get --purge remove paquete1 paquete2 .... paqueteN

Vamos a:

  • /var/lib/postgresql 
  • /var/opt/postgresql
  • /etc/postgresal
y eliminamos lo que haga falta

Buscamos donde está instalado nuestro postgres bueno y metemos el directorio bin en nuesto fichero ~/.bashrc 

Creamos una variable que apunte al directorio bin y lo añadimos al PATH,  por ejemplo:

POSTGRES96=/opt/postgresql/9.6/bin
$PATH=$POSTGRES96:$PATH
export $PATH


guardamos el fichero y así en principio ya apuntamos a nuestro postgres correcto


2. Restaurar una copia de seguridad de otras versiones anteriores de postgres


Me han pasado una copia en versión backup y no hay manera de restaurarla. Cuando le doy aparece una ventana con todos los comandos pero no hace NADA.
Tampoco PgAdmin4 ayuda ya que no hace la restauración.

Al final me ha funcionado. Estos son los pasos:

1. Creo la BD previamente con el PgAdmin y la llamo openweb. 
2. Abro una pantalla y me situo en el directorio donde está el fichero del backup.
3. El fichero se llama openweb.backup
4. Suponemos que el formato es backup (que corresponde a la opción -F c) Si fuera otro formato como "tar" la opción sería -F t
5. Suponemos que nuestro servidor es localhost ( opción -h localhost) y que el puerto es 5432 (opción -p 5432)
6. Accedemos a la base de datos openweb previamente creada (opción  -d openweb)
7. Para no tener problemas entamos con el usuario postres (opción -U postgres) y le damos a la opción -W para que nos pida el password. Si cuando ejecutamos no nos pide el password, algo presuntamente va mal.
8. Le damos la opción -v de verbose para que de mas información y -c para que cree de nuevo la base de datos. La opción -d openweb es para acceder a la BBDD openweb.
9. Nuestro comando es:

pg_restore -h localhost -p 5432 -U postgres -W -v -F c  -c -d openweb openweb.backup

10. Si no salen WARNINGS es que no nos ha hecho caso y no ha funcionado el restore!!!

11. Comprobar (con PgAdmin y haciendo un Refresh)  que la Base de datos ya tiene cargados los datos de la restauración.


jueves, 12 de abril de 2018

SMS: Crear un aviso por SMS al móvil con Twilio

Introducción

Tengo un aplicación crítica que cuabdo falla allgo quiero que me mande un SMS a mi móvil.
En teoría me debería avisar pocas veces.

Para hacer una prueba he visto que con Twilio se puede hacer.

Para ello se requiere que:

  1. Firmar en Twilio para que te asignen un teléfono de tu país para que sea el que envíe SMS a tu teléfonono movil
  2. Tener un telefono móvil propio MY_TEL
  3. Guardar el ACCOUNT_SID
  4. Guardar el AUTH_TOKEN
  5. Guardar el teléfono que te asignan ASSIGNED_TEL
  6. Escribir un pequeño programa

Programa de envío de SMS al móvil

Veamos pues el programa fuente:


package twilio.sms;


import com.twilio.Twilio;
import com.twilio.rest.api.v2010.account.Message;
import com.twilio.type.PhoneNumber;

public class SMSSend {
  // Find your Account Sid and Token at twilio.com/user/account
  public static final String ACCOUNT_SID = "AC0587cd7ab9b495566b220993523xxxxx";
  public static final String AUTH_TOKEN = "03348108e709fcf758d0866045dxxxxx";
  public static final String MY_TEL = "+346807xxxxx";
  public static final String ASSIGNED_TEL = "+349601xxxxx";


  public static void sendSMS(String SMS) {
    Twilio.init(ACCOUNT_SID, AUTH_TOKEN);

    Message message = Message.creator(new PhoneNumber(MY_TEL),
        new PhoneNumber(ASSIGNED_TEL), 
        SMS).create();

    System.out.println(message.getSid());
  }
}

Bastá con llamarlo con

SMSSend.sendSMS("Mensaje a enviar a mi móvil");

y ya está