Ir al contenido



Foto

Como sincronizar dos Bases de Datos (SQLite y PostgreSQL)


  • Por favor identifícate para responder
6 respuestas en este tema

#1 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 748 mensajes
  • LocationPinar del Río, Cuba

Escrito 08 septiembre 2014 - 12:01

Hola a Todos
Tengo una aplicación que usa SQLite y necesito obtener los datos de otra aplicación que usa PostgreSQL, para la primera vez esta bien importar todos los datos de una para la otra, pero después solo necesito los datos nuevos, es decir soncronizar las 2 bases de datos

Los datos de las tablas que necesito, no siempre se modifican por eso necesito saber primero si se modificó alguna tabla o no, para en caso positivo obtener solo los datos nuevos o modificados de la BD Origen

Uso componentes los ZEOS para conectarme a ambos (SQLite y PostgreSQL) y Delphi7
  • 0

#2 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 09 septiembre 2014 - 05:53

Saludos.

Una idea de como puedes obtener esos registros es crear Triggers sobre la tabla en cuestión, tanto para la modificación como la inserción, que te inserten en otra tabla de "Logs" los registros cambiados/nuevos y desde aquí puedas sincronizar.
  • 0

#3 genriquez

genriquez

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 528 mensajes
  • LocationCali, Colombia

Escrito 09 septiembre 2014 - 06:09

Hola

Yo estoy trabajando (empezando) con los Notify/Listen de postgres, como lo dice Rolphy Reyes, se crean unos triggers, pero estos envían un un mensaje via tcp/ip con cierta información a un servidor que está escuchando estos mensajes, este servidor puede realizarse en Delphi, así apenas ocurre alguna modificación, el servidor se entera y realiza la actualización inmediatamente.

Esta es la forma de disparar aplicaciones externas desde Postgres sin necesidad de estar disparando sql cada determinado tiempo para ver si hay una actualización de la base de datos.  Los componentes UniDac de Delphi tienen la posibilidad de registrar un cliente ante postgres y recibir los mensajes Notify, hay otras alternativas con este mismo método.

Espero te sirva la información.

Saludos.
  • 0

#4 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 748 mensajes
  • LocationPinar del Río, Cuba

Escrito 09 septiembre 2014 - 12:44

El problema es que no tengo control de la BD Origen (Postgres), pues es un soft de terceros, y en mi empresa quieren hacer un modulo que usa los datos de varias tablas de ese sistema, por eso en el sistema origen no puedo tocar nada, solo leer los registros que me interesan, y verificar si son iguales o no a los de mi BD (SQLite) para importar los nuevos o modificados

  • 0

#5 genriquez

genriquez

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 528 mensajes
  • LocationCali, Colombia

Escrito 09 septiembre 2014 - 07:16

Amigo mío, allí si no tengo muchas alternativas, al menos que yo haya conocido, lo único que te puedo decir es que insertar es más rápido que modificar, así que busca una opción ya sea por rango de fechas y realiza movimientos completos de registros.  espero alguien tenga alguna estrategia mejor.

Saludos.
  • 0

#6 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 748 mensajes
  • LocationPinar del Río, Cuba

Escrito 12 septiembre 2014 - 07:44

Pues le detallo mejor el problema
En la BD origen necesito las tablas de trabajadores y vehiculos, generalmente son los mismos, pocas veces cambian

Pero puede darse el caso de una alta o baja de algun trabajador, en ese caso seria agregar el nuevo

En el caso de los vehículos, sucede lo mismo, pero además de adicionar, puede darse el caso de que un vehículo cambie la matrícula o el color, en ese caso seria actualizar el dato que cambió
  • 0

#7 genriquez

genriquez

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 528 mensajes
  • LocationCali, Colombia

Escrito 13 septiembre 2014 - 12:41

Mira que yo he tenido que trabajar bajo la misma situación muchas veces, y lo que hago es un append y update, o si puedo dejar la tabla de mi base de datos sin llaves foráneas, prefiero eliminar todo lo que se pueda e insertar nuevamente.  (Solo cuando son tablas maestras).

En las tablas de movimiento o transaccionales si hay que buscar un filtro más detallado, dado el volumen de datos que puede representar.

Saludos.
  • 0