Existe-t-il un moyen de changer le type de clé primaire existant de int en serial sans supprimer la table? J'ai déjà beaucoup de données dans le tableau et je ne veux pas le supprimer.Modification du type de clé primaire int en série
Répondre
Conversion d'un int en série more or less only means adding a sequence default to the value, donc pour en faire un numéro de série;
Choisissez une valeur de départ de la série, supérieure à toute valeur existante dans le tableau
SELECT MAX(id)+1 FROM mytable
Créer une séquence pour la série (tablename_columnname_seq est un bon nom)
CREATE SEQUENCE test_id_seq MINVALUE 3
(en supposant vouloir commencer à 3)Modifier la valeur par défaut de la colonne pour utiliser la séquence
Modifiez la séquence qui doit appartenir à la table/colonne;
ALTER SEQUENCE test_id_seq OWNED BY test.id
Et comme toujours, prenez l'habitude d'exécuter une sauvegarde complète avant en cours d'exécution modifiant les requêtes SQL de personnes au hasard sur l'Internet ;-)
-- temp schema for testing
-- ----------------------------
DROP SCHEMA tmp CASCADE;
CREATE SCHEMA tmp ;
SET search_path=tmp;
CREATE TABLE bagger
(id INTEGER NOT NULL PRIMARY KEY
, tralala varchar
);
INSERT INTO bagger(id,tralala)
SELECT gs, 'zzz_' || gs::text
FROM generate_series(1,100) gs
;
DELETE FROM bagger WHERE random() <0.9;
-- SELECT * FROM bagger;
-- CREATE A sequence and tie it to bagger.id
-- -------------------------------------------
CREATE SEQUENCE bagger_id_seq;
ALTER TABLE bagger
ALTER COLUMN id SET NOT NULL
, ALTER COLUMN id SET DEFAULT nextval('player_id_seq')
;
ALTER SEQUENCE bagger_id_seq
OWNED BY bagger.id
;
SELECT setval('bagger_id_seq', MAX(ba.id))
FROM bagger ba
;
-- Check the result
-- ------------------
SELECT * FROM bagger;
\d bagger
\d bagger_id_seq
- 1. varchar() clé primaire ou clé primaire int?
- 2. Clé primaire invalide datatype [int]
- 3. Comment faire une clé primaire en série?
- 4. Int Clé primaire - dépassant la plage int
- 5. Modification de la clé primaire en clé composite (la clé primaire existe déjà)
- 6. Ember: modification de la clé primaire du modèle avec FixtureAdapter
- 7. SQLServer choisissant le type de clé primaire
- 8. Mysql restart auto int clé primaire
- 9. Modification de la clé primaire en incrémentation automatique
- 10. Refactoring d'un dictionnaire, modification du type de clé
- 11. Int Clé primaire auto-incrémentée et colonne GUID
- 12. Comment joindre en SQL sur une clé primaire en série PHP
- 13. Clé primaire composite en cascade
- 14. Utilisation du type de données en série en tant que clé étrangère
- 15. NHibernate: utilisation d'un type personnalisé en tant que clé primaire
- 16. Type de données pour clé primaire de base de données
- 17. NHibernate composite clé primaire
- 18. clé primaire composé dans le tableau type de variable
- 19. mettre la valeur de la clé étrangère de clé primaire
- 20. Sql Type de données pour la clé primaire - SQL Server?
- 21. Modification de la clé primaire AUTO_INCREMENT pour le partitionnement
- 22. Modification du numéro de série intégré
- 23. Duplication de clé primaire
- 24. Modification ItemName (clé primaire) dans SimpleDB avec boto
- 25. Clé de série du produit/achat
- 26. Modification du nom de clé primaire dans un modèle ASP .NET MVC classe
- 27. type de int * (*) (int *, int * (*)())
- 28. Scénario de clé primaire composite
- 29. sql: modification de la clé primaire en une autre liste d'éléments uniques
- 30. Gestion du type de champ série PosgreSQL dans le sud