Saltar a contenido

Para insertar varias filas en una tabla utilizando una única sentencia INSERT, se utiliza la siguiente sintaxis:

INSERT INTO table_name (column_list)
VALUES
    (value_list_1),
    (value_list_2),
    ...
    (value_list_n);

En esta sintaxis:

  • En primer lugar, especifique el nombre de la tabla en la que desea insertar datos después de las palabras clave INSERT INTO.
  • En segundo lugar, enumere las columnas necesarias o todas las columnas de la tabla entre paréntesis a continuación del nombre de la tabla.
  • En tercer lugar, proporcione una lista de filas separadas por comas después de la palabra clave VALUES.

Para insertar varias filas y devolver las filas insertadas, añada la cláusula RETURNING como se indica a continuación:

INSERT INTO table_name (column_list)
VALUES
    (value_list_1),
    (value_list_2),
    ...
    (value_list_n)
RETURNING * | output_expression;

La inserción de varias filas a la vez tiene ventajas sobre la inserción de una fila cada vez:

  • Rendimiento: La inserción de varias filas en una sola sentencia es a menudo más eficiente que las inserciones individuales múltiples, ya que reduce el número de viajes de ida y vuelta entre la aplicación y el servidor PostgreSQL.
  • Atomicidad: Toda la sentencia INSERT es atómica, lo que significa que o se insertan todas las filas o no se inserta ninguna. Esto asegura la consistencia de los datos.

Ejemplos de inserción de múltiples filas en una tabla

Veamos algunos ejemplos de inserción de varias filas en una tabla.

Creación de una tabla de ejemplo

La siguiente sentencia crea una nueva tabla llamada contactos que tiene cuatro columnas id, nombre, apellido y correo electrónico:

CREATE TABLE contacts (
    id SERIAL PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    email VARCHAR(384) NOT NULL UNIQUE
);

Ejemplo básico de inserción de varias filas

La siguiente sentencia utiliza la sentencia INSERT para insertar tres filas en la tabla de enlaces:

INSERT INTO contacts (first_name, last_name, email) 
VALUES
    ('John', 'Doe', 'john.doe@example.com'),
    ('Jane', 'Smith', 'jane.smith@example.com'),
    ('Bob', 'Johnson', 'bob.johnson@example.com');

PostgreSQL devuelve el siguiente mensaje:

INSERT 0 3Code language: Shell Session (shell)

Para verificar las inserciones, se utiliza la siguiente sentencia:

SELECT * FROM contacts;

Salida:

 id | first_name | last_name |          email
----+------------+-----------+-------------------------
  1 | John       | Doe       | john.doe@example.com
  2 | Jane       | Smith     | jane.smith@example.com
  3 | Bob        | Johnson   | bob.johnson@example.com
(3 rows)

Inserción de varias filas y devolución de las filas insertadas

La siguiente sentencia utiliza la sentencia INSERT para insertar dos filas en la tabla contactos y devuelve las filas insertadas:

INSERT INTO contacts (first_name, last_name, email) 
VALUES
    ('Alice', 'Johnson', 'alice.johnson@example.com'),
    ('Charlie', 'Brown', 'charlie.brown@example.com')
RETURNING *;

Salida:

 id | first_name | last_name |           email
----+------------+-----------+---------------------------
  4 | Alice      | Johnson   | alice.johnson@example.com
  5 | Charlie    | Brown     | charlie.brown@example.com
(2 rows)


INSERT 0 2

Si sólo desea devolver la lista de id insertados, puede especificar la columna id en la cláusula RETURNING de la siguiente manera:

INSERT INTO contacts (first_name, last_name, email) 
VALUES
    ('Eva', 'Williams', 'eva.williams@example.com'),
    ('Michael', 'Miller', 'michael.miller@example.com'),
    ('Sophie', 'Davis', 'sophie.davis@example.com')
RETURNING id;

Salida:

 id
----
  6
  7
  8
(3 rows)


INSERT 0 3

Resumen

  • Especifique varias listas de valores en la sentencia INSERT para insertar varias filas en una tabla.
  • Utilice la cláusula RETURNING para devolver las filas insertadas.