Tengo la base de datos PostgreSQL 9 que usa números enteros que se incrementan automáticamente como claves principales. Quiero duplicar algunas de las filas de una tabla (según algunos criterios de filtro), al mismo tiempo que cambio uno o dos valores, es decir, copio todos los valores de columna, excepto la ID (que se genera automáticamente) y posiblemente otra columna.Duplicar de manera eficiente algunas filas en la tabla de PostgreSQL
Sin embargo, también quiero obtener el mapeo de identificaciones antiguas a nuevas. ¿Hay una mejor manera de hacerlo, simplemente consultar las filas para copiar primero y luego insertar nuevas filas de una en una?
Básicamente quiero hacer algo como esto:
INSERT INTO my_table (col1, col2, col3)
SELECT col1, 'new col2 value', col3
FROM my_table old
WHERE old.some_criteria = 'something'
RETURNING old.id, id;
Sin embargo, esto no funciona con ERROR: missing FROM-clause entry for table "old"
y puedo ver por qué: Postgres debe estar haciendo el primer SELECT y luego insertarlo y los RETURNING
cláusulas sólo tiene acceso a la fila recién insertada.
¿Por casualidad tiene idea de cómo hacer la consulta w/o nombrar todos los atributos Quiero copiar? Tengo una mesa bastante grande (con muchos atributos) y escribir todos ellos y no olvidar que uno es un dolor ... –
¿por qué dos preguntas sobre lo mismo? http://stackoverflow.com/questions/29256888/insert-into-from-select-returning-id-mappings – murison