Détails
Comment définir une clé primaire auto incrémentée dans PostgreSQL ?
J'ai une table dans PostgreSQL avec 22 colonnes, et je veux ajouter une clé primaire auto incrémentée.
J'ai essayé de créer une colonne appelée id
de type BIGSERIAL mais pgadmin a répondu avec une erreur :
ERROR: sequence must have same owner as table it is linked to.
Quelqu'un sait-il comment résoudre ce problème ? Comment ajouter une clé primaire auto-incrémentée dans PostgreSQL sans recréer la table ?
251
3
Essayez cette commande :
Essayez-la avec le même utilisateur de la base de données que celui qui a créé la table.
Clé primaire auto incrémentée dans postgresql :
Etape 1, créer votre table:
Etape 2, insérez des valeurs dans votre table comme ceci, remarquez que mytable_key n'est pas spécifié dans la première liste de paramètres, cela provoque l'auto-incrémentation de la séquence par défaut.
*Étape 3, sélectionnez à partir de votre table :**
Etape 4, interpréter la sortie:
Observez que la colonne mytable_key a été auto incrémentée.
ProTip:
Vous devriez toujours utiliser une clé primaire sur votre table car postgresql utilise en interne des structures de table de hachage pour augmenter la vitesse des insertions, suppressions, mises à jour et sélections. Si une colonne de clé primaire (qui est forcée à être unique et non nulle) est disponible, on peut compter sur elle pour fournir une graine unique pour la fonction de hachage. Si aucune colonne de clé primaire n'est disponible, la fonction de hachage devient inefficace car elle sélectionne un autre ensemble de colonnes comme clé.
Créer une clé primaire auto incrémentée dans postgresql, en utilisant une séquence personnalisée:
Etape 1, créer votre séquence:
Etape 2, créez votre tableau
Etape 3, insérer dans votre table
Etape 4, observer les lignes
Les deux rangées ont des clés qui commencent à 1 et sont incrémentées de 1, comme défini par la séquence.
Bonus Elite ProTip:
Les programmeurs détestent taper, et taper le
nextval('splog_adfarm_seq' ;)
est ennuyeux. Vous pouvez taperDEFAULT
pour ce paramètre à la place, comme ceci :Pour que la méthode ci-dessus fonctionne, vous devez définir une valeur par défaut pour cette colonne clé dans la table splog_adfarm. Ce qui est plus joli.