Saltar a contenido

La sentencia INSERT de PostgreSQL permite insertar una nueva fila en una tabla.

Esta es la sintaxis básica de la sentencia INSERT:

INSERT INTO table1(column1, column2, …)
VALUES (value1, value2, …);

En esta sintaxis:

  • En primer lugar, especifique el nombre de la tabla(table1) en la que desea insertar datos después de las palabras clave INSERT INTO y una lista de columnas separadas por comas (colum1, column2, ....).
  • En segundo lugar, proporcione una lista de valores separados por comas entre paréntesis ( valor1, valor2, ...) después de la palabra clave VALUES. Las listas de columnas y valores deben estar en el mismo orden.

La sentencia INSERT devuelve una etiqueta de comando con la siguiente forma:

INSERT oid count

En esta sintaxis:

  • El OID es un identificador de objeto. PostgreSQL utiliza el OID internamente como clave primaria para sus tablas de sistema. Típicamente, la sentencia INSERT devuelve el OID con un valor de 0.
  • El count es el número de filas que la sentencia INSERT ha insertado con éxito.

Si inserta una nueva fila en una tabla con éxito, el retorno típicamente se verá como:

INSERT 0 1

Cláusula RETURN

La sentencia INSERT tiene una cláusula RETURNING opcional que devuelve la información de la fila insertada.

Si desea devolver toda la fila insertada, utilice un asterisco(*) después de la palabra clave RETURNING:

INSERT INTO table1(column1, column2, …)
VALUES (value1, value2, …)
RETURNING *;

Si desea devolver alguna información sobre la fila insertada, puede especificar una o más columnas después de la cláusula RETURNING.

Por ejemplo, la siguiente sentencia devuelve el id de la fila insertada:

INSERT INTO table1(column1, column2, …)
VALUES (value1, value2, …)
RETURNING id;

Para renombrar el valor devuelto, se utiliza la palabra clave AS seguida del nombre de la salida. Por ejemplo:

INSERT INTO table1(column1, column2, …)
VALUES (value1, value2, …)
RETURNING output_expression AS output_name;

Para insertar varias filas en una tabla simultáneamente, puede utilizar la sentencia INSERT multiple rows.

Ejemplos de sentencias INSERT de PostgreSQL

La siguiente sentencia crea una nueva tabla llamada enlaces para la demostración:

CREATE TABLE links (
  id SERIAL PRIMARY KEY, 
  url VARCHAR(255) NOT NULL, 
  name VARCHAR(255) NOT NULL, 
  description VARCHAR (255), 
  last_update DATE
);

Tenga en cuenta que aprenderá a crear una nueva tabla en el tutorial siguiente. En este tutorial, sólo necesita ejecutarlo para crear una nueva tabla.

Ejemplo básico de sentencia INSERT de PostgreSQL

El siguiente ejemplo utiliza la sentencia INSERT para insertar una nueva fila en la tabla links:

INSERT INTO links (url, name)
VALUES('https://www.postgresqltutorial.com','PostgreSQL Tutorial');

La sentencia devuelve el siguiente resultado:

INSERT 0 1

Para insertar datos de caracteres, debe encerrarlos entre comillas simples ('), por ejemplo 'Tutorial PostgreSQL'.

Si omite las columnas no nulas en la sentencia INSERT, PostgreSQL emitirá un error. Pero si omite la columna nula, PostgreSQL utilizará el valor por defecto de la columna para la inserción.

En este ejemplo, la descripción es una columna anulable porque no tiene una restricción NOT NULL. Por lo tanto, PostgreSQL utiliza NULL para insertar en la columna description.

PostgreSQL genera automáticamente un número secuencial para la columna serial, por lo que no es necesario proporcionar un valor para la columna serial en la sentencia INSERT.

La siguiente sentencia SELECT muestra el contenido de la tabla de enlaces:

SELECT  * FROM links;

Salida:

 id |                url                 |        name         | description | last_update
----+------------------------------------+---------------------+-------------+-------------
  1 | https://www.postgresqltutorial.com | PostgreSQL Tutorial | null        | null
(1 row)

Inserción de una cadena de caracteres que contiene una comilla simple

Si desea insertar una cadena de caracteres que contenga una comilla simple ('), como O'Reilly Media, deberá utilizar una comilla simple adicional (') para escaparla. Por ejemplo

INSERT INTO links (url, name)
VALUES('http://www.oreilly.com','O''Reilly Media');

Salida:

INSERT 0 1

La siguiente sentencia verifica la inserción:

SELECT * FROM links;

Salida:

 id |                url                 |        name         | description | last_update
----+------------------------------------+---------------------+-------------+-------------
  1 | https://www.postgresqltutorial.com | PostgreSQL Tutorial | null        | null
  2 | http://www.oreilly.com             | O'Reilly Media      | null        | null
(2 rows)

Insertar un valor de fecha

Para insertar una fecha en una columna DATE, utilice la fecha en el formato 'AAAA-MM-DD'.

Por ejemplo, la siguiente sentencia inserta una nueva fila con una fecha especificada en la tabla de enlaces:

INSERT INTO links (url, name, last_update)
VALUES('https://www.google.com','Google','2013-06-01');

Salida:

INSERT 0 1

La siguiente sentencia recupera todos los datos de la tabla de enlaces para verificar la inserción:

 id |                url                 |        name         | description | last_update
----+------------------------------------+---------------------+-------------+-------------
  1 | https://www.postgresqltutorial.com | PostgreSQL Tutorial | null        | null
  2 | http://www.oreilly.com             | O'Reilly Media      | null        | null
  3 | https://www.google.com             | Google              | null        | 2013-06-01
(3 rows)

Obtener el último ID insertado

Para obtener el último ID insertado de la fila insertada, utilice la cláusula RETURNING de la sentencia INSERT.

Por ejemplo, la siguiente sentencia inserta una nueva fila en la tabla de enlaces y devuelve el último ID insertado:

INSERT INTO links (url, name)
VALUES('https://www.postgresql.org','PostgreSQL') 
RETURNING id;

Salida:

 id
----
  4
(1 row)

Resumen

  • Utilice la sentencia INSERT de PostgreSQL para insertar una nueva fila en una tabla.
  • Utilice la cláusula RETURNING para obtener las filas insertadas.