una tabla primary primaria poner modificar llave foranea eliminar drop crear como clave agregar database postgresql primary-key

database - primary - ¿Cómo agregar una clave primaria autoincrementada a una tabla existente, en PostgreSQL?



eliminar clave primaria sql server (4)

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 la gente que comentó )

Versiones modernas de PostgreSQL

Supongamos que tiene una tabla llamada test1 , a la que desea agregar una columna de id auto-incremento, clave principal (sustituto). El siguiente comando debería ser suficiente en las versiones recientes de PostgreSQL:

ALTER TABLE test1 ADD COLUMN id SERIAL PRIMARY KEY;

Versiones anteriores de PostgreSQL

En las versiones anteriores de PostgreSQL (antes de 8.x?) Tenía que hacer todo el trabajo sucio. La siguiente secuencia de comandos debería hacer el truco:

ALTER TABLE test1 ADD COLUMN id INTEGER; CREATE SEQUENCE test_id_seq OWNED BY test1.id; ALTER TABLE test ALTER COLUMN id SET DEFAULT nextval(''test_id_seq''); UPDATE test1 SET id = nextval(''test_id_seq'');

De nuevo, en versiones recientes de Postgres esto es más o menos equivalente al único comando anterior.


Aterricé aquí porque también estaba buscando algo así. En mi caso, estaba copiando los datos de un conjunto de tablas de etapas con muchas columnas en una tabla, al mismo tiempo que asignaba identificadores de fila a la tabla de destino. Aquí hay una variante de los enfoques anteriores que utilicé. Agregué la columna de serie al final de mi tabla de objetivos. De esa manera no tengo que tener un marcador de posición en la declaración Insertar. Luego, una simple selección * en la tabla de destino llenó automáticamente esta columna. Estas son las dos declaraciones SQL que utilicé en PostgreSQL 9.6.4.

ALTER TABLE target ADD COLUMN some_column SERIAL; INSERT INTO target SELECT * from source;


Para usar una columna de identidad en v10,

ALTER TABLE test ADD COLUMN id { int | bigint | smallint} GENERATED { BY DEFAULT | ALWAYS } AS IDENTITY PRIMARY KEY;

Para obtener una explicación de las columnas de identidad, consulte https://blog.2ndquadrant.com/postgresql-10-identity-columns/ .

Para conocer la diferencia entre GENERADO POR PREDETERMINADO y SIEMPRE GENERADO, consulte https://www.cybertec-postgresql.com/en/sequences-gains-and-pitfalls/ .

Para modificar la secuencia, consulte https://popsql.io/learn-sql/postgresql/how-to-alter-sequence-in-postgresql/ .


ALTER TABLE test1 ADD COLUMN id SERIAL PRIMARY KEY;

Esto es todo lo que necesita para:

  1. Agregue la columna de id
  2. Rellenarlo con una secuencia de 1 a contar (*).
  3. Establézcalo como clave principal / no nulo.

Se le otorga crédito a @resnyanskiy que dio esta respuesta en un comentario.