¿Cómo agregar una clave primaria de incremento automático a una tabla existente en PostgreSQL?
Tengo una tabla con datos existentes. ¿Hay alguna manera de agregar una clave principal sin eliminar y volver a crear la tabla?
( Actualizado - Gracias a las personas que comentaron )
Versiones modernas de PostgreSQL
Suponga que tiene una tabla llamada test1
, a la que desea agregar una id
columna de clave primaria (sustituta) de incremento automático. El siguiente comando debería ser suficiente en versiones recientes de PostgreSQL:
ALTER TABLE test1 ADD COLUMN id SERIAL PRIMARY KEY;
Versiones anteriores de PostgreSQL
En versiones antiguas de PostgreSQL (¿antes de la 8.x?), tenías que hacer todo el trabajo sucio. La siguiente secuencia de comandos debería funcionar:
ALTER TABLE test1 ADD COLUMN id INTEGER;
CREATE SEQUENCE test_id_seq OWNED BY test1.id;
ALTER TABLE test1 ALTER COLUMN id SET DEFAULT nextval('test_id_seq');
UPDATE test1 SET id = nextval('test_id_seq');
Nuevamente, en versiones recientes de Postgres esto es aproximadamente equivalente al comando único anterior.
ALTER TABLE test1 ADD COLUMN id SERIAL PRIMARY KEY;
Esto es todo lo que necesitas para:
- Añade la
id
columna - Rellénelo con una secuencia desde 1 hasta contar (*).
- Configúrelo como clave principal/no nulo.
El crédito se otorga a @resnyanskiy, quien dio esta respuesta en un comentario.