Tengo una tabla con datos existentes. ¿Hay alguna manera de agregar una clave principal sin eliminar y volver a crear la tabla?¿Cómo agregar una clave primaria de incremento automático a una tabla existente, en PostgreSQL?
Respuesta
(Actualizado - Gracias a las personas que comentaron)
versiones modernas de PostgreSQL
Suponga que tiene una tabla llamada test1
, a la que desea agregar un incremento automático, clave primaria id
(sustituta) columna. El siguiente comando debería ser suficiente en las últimas versiones 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?) Que tenía que hacer todo el trabajo sucio. La siguiente secuencia de comandos debe 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');
Una vez más, en las últimas versiones de Postgres esto es más o menos equivalente al comando individual arriba.
ALTER TABLE test1 ADD COLUMN id SERIAL PRIMARY KEY;
Esto es todo lo que necesita:
- Añadir la columna
id
- rellenarlo con una secuencia de 1 a count (*).
- Configúrelo como clave principal/no nulo.
Se le ha dado crédito a @resnyanskiy quien dio esta respuesta en un comentario.
Esto debe marcarse como respuesta, y la respuesta debe pertenecer a @resnyanskiy –
Aterricé aquí porque estaba buscando algo así también. 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 destino. 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 utilizar una columna de identidad en v10,
ALTER TABLE test
ADD COLUMN id { int | bigint | smallint}
GENERATED { BY DEFAULT | ALWAYS } AS IDENTITY PRIMARY KEY;
Para una explicación de las columnas de identidad, consulte https://blog.2ndquadrant.com/postgresql-10-identity-columns/.
Para la diferencia entre GENERADO POR PREDETERMINADO y SIEMPRE GENERADO, vea 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/.
El problema con esta solución es que si la tabla ya contiene filas, se obtiene un error: 'Error SQL [23502]: ERROR: columna" id "contiene valores nulos' – isapir
- 1. SQL Server agregar la clave primaria de incremento automático a la tabla existente
- 2. ¿Cómo agregar la clave primaria de incremento automático en función de un orden de columna?
- 3. SQLite clave multi-primaria en una tabla, una de ellas es Incremento automático
- 4. Cómo agregar una clave primaria compuesta a la tabla
- 5. Cómo anular la atribución de una clave primaria de incremento automático al insertar un valor en una tabla MySQL?
- 6. Insertar incremento automático de la clave principal en la tabla existente
- 7. cómo agregar una nueva columna a la clave primaria compuesta existente
- 8. Incremento automático en phpmyadmin
- 9. ¿Cómo agrego una clave externa a una tabla SQLite existente?
- 10. Agregar una identidad a una columna existente
- 11. SQLSERVER: ¿Cómo modificar una tabla existente int clave primaria para convertirse en una columna de identidad?
- 12. Insertar una clave primaria autoincrementada en una tabla de acceso
- 13. cómo agregar una clave principal a una tabla en rieles
- 14. clave primaria compuesta de PostgreSQL
- 15. ¿Cómo agrego retroactivamente una clave primaria a mi mesa en los rieles?
- 16. ¿Cómo puedo agregar una columna a una tabla existente?
- 17. tabla no tiene una clave primaria
- 18. Agregar incremento automático a la columna de la clave principal en Rails
- 19. Agregar una clave primaria a una tabla MySQL y rellenarla automáticamente
- 20. ¿Se puede confiar en la clave primaria de incremento automático en su base de datos?
- 21. Restablecer la clave primaria de PostgreSQL a 1
- 22. Cómo obtener el valor de la clave primaria de auto-incremento en MySQL usando Hibernate
- 23. .NET Entity Framework Agregar nueva fila con clave primaria incremental
- 24. MySQL - cómo usar VARCHAR como INCREMENTO AUTOMÁTICO Clave principal
- 25. ALTER TABLE para agregar una clave primaria compuesta
- 26. ¿Hay un incremento automático en sqlite?
- 27. Razones para no usar un número de incremento automático para una clave principal
- 28. ¿Cómo agregar AUTO_INCREMENT a una columna existente?
- 29. ¿Cómo cambiar una clave primaria en SQL a auto_increment?
- 30. Cómo agregar 1 al valor de una columna de una fila existente en mysql
UPDATE test1 SET id = DEFAULT; también funciona –
Estoy usando ORACLE, por lo que compartirlo podría ser útil para los chicos de ORACLE En ORACLE: ALTER TABLE TEST1 ADD ID NUMBER; UPDATE TEST1 SET ID = TEST1_SEQ.NEXTVAL; ALTER TABLE TEST1 ADD PRIMARY KEY (ID); cree una Secuencia TEST1_SEQ antes de ejecutar la instrucción UPDATE – msbyuva
Tenga en cuenta que 'ADD PRIMARY KEY' también crea una restricción' NOT NULL' (probada en postgres 9.3) como se esperaba y se desea. –