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.