Suponha que eu tenha uma tabela com o seguinte nome people
, onde id
é uma chave primária:
+-----------+---------+---------+
| id | fname | lname |
| (integer) | (text) | (text) |
+===========+=========+=========+
| 1 | Daniel | Edwards |
| 2 | Fred | Holt |
| 3 | Henry | Smith |
+-----------+---------+---------+
Estou tentando escrever uma consulta de duplicação de linha que seja robusta o suficiente para levar em consideração as alterações de esquema na tabela. Sempre que adiciono uma coluna à tabela, não quero ter que voltar e modificar a consulta de duplicação.
Eu sei que posso fazer isso, o que irá duplicar o id do registro 2 e dar ao registro duplicado um novo id:
INSERT INTO people (fname, lname) SELECT fname, lname FROM people WHERE id = 2;
No entanto, se eu adicionar uma age
coluna, precisarei modificar a consulta para também contabilizar a coluna de idade.
Obviamente, não posso fazer o seguinte, porque também duplicará a chave primária, resultando em um duplicate key value violates unique constraint
-- E não quero que eles compartilhem o mesmo id de qualquer maneira:
INSERT INTO people SELECT * FROM people WHERE id = 2
Com isso dito, qual seria uma abordagem razoável para resolver esse desafio? Eu preferiria ficar longe das stored procedures, mas não sou 100% contra elas, suponho...