una tipos tabla sirve simple que para llena datos concepto como claves clave campo postgresql pgadmin

postgresql - tipos - Cambiar clave principal a incremento automático



tipos de clave principal en access (3)

Tengo un jugador de mesa y un ID de jugador de clave principal que es el carácter (7). Ya tengo algunos registros en esta tabla, y también tengo otras tablas que tienen ID de jugador como clave externa, y esas tablas también tienen algunos registros.

¿Cómo puedo configurar el ID de jugador para auto-incremento? Después de leer un rato, creo que debería haberlo hecho desde el principio, pero como no puedo hacerlo ahora, ¿puedo hacerlo de todos modos?

Por ejemplo, cuando ejecuto este

ALTER TABLE player ADD COLUMN key_column BIGSERIAL PRIMARY KEY;

devuelve un error:

ERROR: multiple primary keys for table "player" are not allowed

y si descarto el ID de jugador existente, los registros en otras tablas que hacen referencia a él también se eliminarán.

¿Hay alguna forma de "cambiar" la ID de jugador de la clave principal existente para el incremento automático?


Lo resuelvo: solo agrega un valor predeterminado de incremento automático al ID de jugador:

create sequence player_id_seq; alter table player alter playerid set default nextval(''player_id_seq''); Select setval(''player_id_seq'', 2000051 ); --set to the highest current value of playerID


No creo que pueda tener 2 claves principales en una tabla, y como el tipo de datos de ID de jugador es el carácter (7), no creo que pueda cambiarlo a incremento automático.

Por lo tanto, creo que tendría que eliminar la restricción de la clave principal en playerID si desea poder agregar una nueva clave principal.

Como ya tiene datos en su mesa y usa playerID como clave externa en otras tablas, le aconsejaría que duplique su tabla de jugador y pruebe estos cambios en su segunda tabla para evitar corromper sus datos.

Pero antes de intentar todo esto, asegúrese de que está intentando realizar estos cambios utilizando el mismo db-user que creó las tablas que está cambiando.


DROP SCHEMA tmp CASCADE; CREATE SCHEMA tmp ; SET search_path=tmp; -- create som data to play with CREATE TABLE bagger ( player_id CHAR(6) , tralala varchar ); -- populate the table INSERT INTO bagger(player_id,tralala) SELECT gs::text, ''zzz_'' || gs::text FROM generate_series(1,10) gs ; SELECT * FROM bagger; -- -- create the sequence, change the datatype and bind it to the sequence -- CREATE SEQUENCE player_id_seq; ALTER TABLE bagger ALTER COLUMN player_id TYPE INTEGER USING player_id::integer , ALTER COLUMN player_id SET NOT NULL , ALTER COLUMN player_id SET DEFAULT nextval(''player_id_seq'') ; ALTER SEQUENCE player_id_seq OWNED BY bagger.player_id ; -- -- reset the sequence to containe the maximum occuring player_id in the table -- SELECT setval(''player_id_seq'', mx.mx) FROM (SELECT MAX(player_id) AS mx FROM bagger) mx ; SELECT * FROM bagger; /d bagger

Salida:

DROP SCHEMA CREATE SCHEMA SET CREATE TABLE INSERT 0 10 player_id | tralala -----------+--------- 1 | zzz_1 2 | zzz_2 3 | zzz_3 4 | zzz_4 5 | zzz_5 6 | zzz_6 7 | zzz_7 8 | zzz_8 9 | zzz_9 10 | zzz_10 (10 rows) CREATE SEQUENCE ALTER TABLE setval -------- 10 (1 row) player_id | tralala -----------+--------- 1 | zzz_1 2 | zzz_2 3 | zzz_3 4 | zzz_4 5 | zzz_5 6 | zzz_6 7 | zzz_7 8 | zzz_8 9 | zzz_9 10 | zzz_10 (10 rows) Table "tmp.bagger" Column | Type | Modifiers -----------+-------------------+----------------------------------------------------- player_id | integer | not null default nextval(''player_id_seq''::regclass) tralala | character varying |