Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

411
Vistas
¿Cómo puedo ejecutar una combinación externa en dos tablas postgreSQL grandes en lotes?

Tengo dos tablas con millones de filas. Comparten una dirección de correo electrónico común. No comparten ningún otro campo.

Tengo una operación de unión que funciona bien.

 select r.*,l.* from righttable r full outer join lefttable l on r.email=l.email

Sin embargo, el conjunto de resultados contiene millones de filas, lo que abruma la memoria de mi servidor. ¿Cómo puedo ejecutar consultas consecutivas que solo obtengan un número limitado de filas de cada tabla a la vez y, en última instancia, visiten todas las filas de las dos tablas?

Además, después de recibir un conjunto de resultados, nuestro servidor puede realizar algunas inserciones en una o ambas tablas. Me temo que esto puede complicar el seguimiento del desplazamiento en cada consulta consecutiva. Tal vez no sea un problema. No puedo envolver mi cabeza alrededor de eso.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

No creo que pueda hacer esto en lotes, porque no sabrá qué filas fabricar para cumplir con el "EXTERIOR COMPLETO" sin ver todos los datos. Es posible que pueda evitarlo si sabe que nadie está realizando cambios en las tablas mientras trabaja, seleccionando las tuplas solo a la izquierda, las tuplas solo a la derecha y las tuplas internas en consultas separadas.

Pero no debería consumir toda su memoria (suponiendo que se refiera a la RAM, no al espacio en disco) en el servidor, ya que debería usar archivos temporales en lugar de RAM para la mayor parte del almacenamiento necesario (aunque hay algunos problemas con el uso de la memoria para grandes uniones hash, por lo que puede intentar set enable_hashjoin=off ).

El cliente podría usar demasiada memoria, ya que podría intentar leer todo el conjunto de resultados en la RAM del cliente a la vez. Hay formas de evitar esto, pero probablemente no impliquen manipular el JOIN en sí. Puede usar un cursor para leer en lotes desde un único flujo de resultados, o simplemente puede enviar los resultados al disco usando \copy, y luego split en algo como GNU.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda