¿Cuál es la forma más rápida de realizar una inserción masiva en Postgres? [cerrado]

Resuelto Ash asked hace 15 años • 11 respuestas

Necesito insertar mediante programación decenas de millones de registros en una base de datos de Postgres. Actualmente, estoy ejecutando miles de declaraciones de inserción en una sola consulta.

¿Existe una mejor manera de hacer esto, alguna declaración de inserción masiva que no conozco?

Ash avatar Apr 17 '09 10:04 Ash
Aceptado

PostgreSQL tiene una guía sobre cómo poblar mejor una base de datos inicialmente y sugiere usar el comando COPY para cargar filas de forma masiva. La guía tiene otros buenos consejos sobre cómo acelerar el proceso, como eliminar índices y claves externas antes de cargar los datos (y volver a agregarlos después).

Dan Lew avatar Apr 17 '2009 03:04 Dan Lew

Existe una alternativa al uso de COPY, que es la sintaxis de valores de varias filas que admite Postgres. De la documentación :

INSERT INTO films (code, title, did, date_prod, kind) VALUES
    ('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
    ('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');

El código anterior inserta dos filas, pero puede extenderlas arbitrariamente, hasta alcanzar la cantidad máxima de tokens de declaración preparados (puede que sean $999, pero no estoy 100% seguro de eso). A veces no se puede utilizar COPY y este es un sustituto digno para esas situaciones.

Ben Harper avatar Jan 27 '2015 10:01 Ben Harper

Una forma de acelerar las cosas es realizar explícitamente múltiples inserciones o copias dentro de una transacción (digamos 1000). El comportamiento predeterminado de Postgres es confirmar después de cada declaración, por lo que al agrupar las confirmaciones por lotes, puede evitar algunos gastos generales. Como dice la guía en la respuesta de Daniel, es posible que deba desactivar la confirmación automática para que esto funcione. También tenga en cuenta el comentario en la parte inferior que sugiere que aumentar el tamaño de wal_buffers a 16 MB también puede ayudar.

Dana the Sane avatar Apr 17 '2009 04:04 Dana the Sane