¿Cómo agregar una clave primaria de incremento automático a una tabla existente en PostgreSQL?

Resuelto xRobot asked hace 14 años • 7 respuestas

Tengo una tabla con datos existentes. ¿Hay alguna manera de agregar una clave principal sin eliminar y volver a crear la tabla?

xRobot avatar May 31 '10 22:05 xRobot
Aceptado

( Actualizado - Gracias a las personas que comentaron )

Versiones modernas de PostgreSQL

Suponga que tiene una tabla llamada test1, a la que desea agregar una idcolumna 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.

leonbloy avatar May 31 '2010 15:05 leonbloy
ALTER TABLE test1 ADD COLUMN id SERIAL PRIMARY KEY;

Esto es todo lo que necesitas para:

  1. Añade la idcolumna
  2. Rellénelo con una secuencia desde 1 hasta contar (*).
  3. Configúrelo como clave principal/no nulo.

El crédito se otorga a @resnyanskiy, quien dio esta respuesta en un comentario.

Synesso avatar May 04 '2015 00:05 Synesso