Referencia: Comandos SQL:
- ALTER TABLE: cambiar la definición de una tabla
- ANALYZE: colecta estadísticas sobre una bb.dd.
- CREATE INDEX: define un nuevo índice
- CREATE TABLE: define una nueva tabla
- DELETE: elimina filas de una tabla
- DROP TABLE: elimina una tabla
- EXPLAIN: muestra el plan de ejecución
- INSERT: crea nuevas filas en una tabla
- SELECT: obtiene filas de una tabla o vista
- TRUNCATE: vacía una tabla o un conjunto de ellas
- UPDATE: modifica filas de una tabla
- VACUUM: limpia y opcionalmente analiza una bb.dd.
INSERT
Nombre
INSERT -- crea nueva filas en una tabla
Sinopsis
INSERT INTO tabla [ ( columna [, ...] ) ]
{ DEFAULT VALUES | VALUES ( { expresión | DEFAULT } [, ...] ) [, ...] | consulta }
[ RETURNING * | expresión_salida [ [ AS ] nombre_salida ] [, ...] ]Descripción
INSERT insertar nuevas filas dentro de en una tabla. Se puede insertar una o más filas especificadas por expresiones de valores, o cero o más filas resultantes de una consulta.
Los nombres de columnas destino pueden ser listadas en cualquier orden. Si no se da una lista de nombres de columna, de forma predeterminada se toman todas las columnas de la tabla en su orden declarado; o los primeros N nombres de columnas, si hay solo N columnas provistas en la clausula VALUES o en la consulta. Los valores provistos por la clausula VALUES o la query son asociados con las columnas explícitas o implícitas de izquierda a derecha.
Cada columna no presente en la lista explicita o implícita será completada con los valores por defecto, ya sea los valores predeterminados declarados o nulos de lo contrario.
Si la expresión para cualquier columna no es del tipo de datos correcto, una conversión automática de tipos será intentada.
La clausula opcional RETURNING causa que el INSERT compute y retorne valores basados en la fila actualmente insertada. Esto es principalmente útil para obtener los valores que fueron provistos por defecto, como los números seriales de secuencia. Sin embargo, se permite cualquier expresión usando las columnas de la tabla. La sintaxis de la lista RETURNING es idéntica a la sintaxis de la lista de salida de SELECT.
Debe tener privilegios INSERT sobre la tabla para poder insertar en ella. Si se epecifíca una lista de columnas, solo se necesita privilegios INSERT en las columnas listadas. Usar la clausula RETURNING requiere privilegios SELECT en todas las columnas mencionadas en el RETURNING. Si se usa una clausula query para insertar filas desde una consulta, obviamente se necesita tener privilegios SELECT en cualquier tabla o columna usada en dicha consulta.
Parámetros
- tabla
- El nombre de una tabla existente (opcionalmente calificado por el esquema).
- columna
- El nombre de una columna de la tabla. Si es necesario, el nombre de columna puede ser calificado con un nombre de subcamo o subíndice de arreglo. (Insertando solo en algunos campos de una columna copuesta deja a los otros campos nulos.)
- DEFAULT VALUES
- Todas las columnas serán completadas con sus valores predeterminados.
- expresión
- Una expresión o valor a asignar a la correspondiente columna.
- DEFAULT
- La correspondiente columna será completada con sus valores predeterminados.
- consulta
- Una consulta (sentencia SELECT) que provee las filas a ser insertadas. Referirse a la sentencia SELECT para una descripción de la sintaxis.
- expresión_salida
- Una expresión para ser computada y retornada por el comando INSERT luego de que la fila es insertada. Le expresión puede usar cualquier nombre de columna de la tabla. Escribir * para devolver todas las columnas de las filas insertadas.
- nombre_salida
- Un nombre para usar para la columna devuelta.
Salidas
Al completarse exitosamente, un comando INSERT devuelve una etiqueta de comando de la forma
INSERT oid cantidad
La cantidad es el número de filas insertadas. Si cantidad es exactamente uno, y la tabla destino tiene OIDs, entonces oid es el OID asignado a la fila insertada. De lo contrario, oid es cero.
Si el comando INSERT contiene una clausula RETURNING, el resultado será similar al de una sentencia SELECT conteniendo las columnas y valores definidos en la lista RETURNING, computados sobre las filas insertadas por el comando.
Ejemplos
Insertar una fila individual en la tabla peliculas:
INSERT INTO peliculas VALUES
('UA502', 'Bananas', 105, '1971-07-13', 'Comedia', '82 minutes');
En este ejemplo, la columna duracion es omitida y por lo tanto tendrá el valor predeterminado:
INSERT INTO peliculas (codigo, titulo, did, fecha_prod, genero)
VALUES ('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama');
Este ejemplo usa la clausula DEFAULT para la columna fecha en vez de especificar su valor:
INSERT INTO peliculas VALUES
('UA502', 'Bananas', 105, DEFAULT, 'Comedia', '82 minutes');
INSERT INTO peliculas (codigo, titulo, did, fecha_prod, genero)
VALUES ('T_601', 'Yojimbo', 106, DEFAULT, 'Drama');
Para insertar una fila enteramente de valores predeterminados:
INSERT INTO peliculas DEFAULT VALUES;
Para insertar filas múltiples usando la sintaxis VALUES multi-fila:
INSERT INTO peliculas (codigo, titulo, did, fecha_prod, genero) VALUES
('B6717', 'Tampopo', 110, '1985-02-10', 'Comedia'),
('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedia');
Este ejemplo inserta algunas filas en la tabla peliculas de la tabla tmp_peliculas con las misma disposición de columnas que peliculas:
INSERT INTO peliculas SELECT * FROM tmp_peliculas WHERE fecha_prod < '2004-05-07';
Este ejemplo inserta en columnas de arreglo:
-- Crear un tablero vacio de ta-te-ti de 3x3
INSERT INTO tateti (juego, tablero[1:3][1:3])
VALUES (1, '{{" "," "," "},{" "," "," "},{" "," "," "}}');
-- Los subindices en el ejemplo anterior no es realmente necesitado
INSERT INTO tateti (juego, tablero)
VALUES (2, '{{X," "," "},{" ",O," "},{" ",X," "}}');
Insertar una fila individual en la tabla distribuidores, retornando el número de secuencia generado por la clausula DEFAULT:
INSERT INTO distribuidores (did, nombre) VALUES (DEFAULT, 'XYZ Widgets') RETURNING did;
Compatibilidad
INSERT se ajusta al estándar SQL, exceptuando que la clausula RETURNING es una extensión PostgreSQL. También, el caso en que la lista de nombres de columnas es omitida, pero no todas las columnas son completadas con la clausula VALUES o consulta, no es permitido en el estándar.
Limitaciones posibles en la clausula consulta están documentadas en la sentencia SELECT.
