Ho un database PostgreSQL 9 che utilizza numeri interi a incremento automatico come chiavi primarie. Voglio duplicare alcune delle righe in una tabella (in base ad alcuni criteri di filtro), cambiando uno o due valori, ovvero copiando tutti i valori di colonna, ad eccezione dell'ID (che viene generato automaticamente) e probabilmente di un'altra colonna.Duplica efficacemente alcune righe nella tabella PostgreSQL
Tuttavia, voglio anche ottenere la mappatura dal vecchio al nuovo ID. C'è un modo migliore per farlo, basta interrogare le righe per copiare prima e poi inserire nuove righe una alla volta?
In sostanza voglio fare qualcosa di simile:
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;
Tuttavia, questo non riesce con ERROR: missing FROM-clause entry for table "old"
e posso capire perché: Postgres deve fare la prima SELECT e poi inserendolo ei RETURNING
clausole ha solo l'accesso alla riga appena inserita.
Ti capita di avere idea di come fare la vostra richiesta w/o nominare tutti gli attributi che voglio copiare? Ho un tavolo abbastanza grande (con molti attributi) e li scrivo tutti e non dimenticare che uno è un dolore ... –
perché due domande sulla stessa cosa? http://stackoverflow.com/questions/29256888/insert-into-from-select-returning-id-mappings – murison