J'ai une table dans PostgreSQL avec 22 colonnes, et je veux ajouter une clé primaire d'incrémentation automatique.
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 à incrémentation automatique dans PostgreSQL sans recréer la table?
sql
postgresql
mkn
la source
la source
ALTER TABLE mytable ADD PRIMARY KEY (column);
. Postgresql vérifiera que la colonne ne contient aucun NULL.bigserial
etserial
donnent la même erreur:ERROR: syntax error at or near "BIGSERIAL"
Incrémentation automatique de la clé primaire dans postgresql:
Étape 1, créez votre table:
Étape 2, insérez des valeurs dans votre table comme ceci, notez que mytable_key n'est pas spécifié dans la première liste de paramètres, cela entraîne l'auto-incrémentation de la séquence par défaut.
Étape 3, sélectionnez * dans votre tableau:
Étape 4, interprétez la sortie:
Observez que la colonne mytable_key a été incrémentée automatiquement.
ProTip:
Vous devez 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 unique et non nulle) est disponible, elle peut être utilisée pour fournir une valeur de départ 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é.
la source
SERIAL
crée unsequence
dans les coulisses: postgresql.org/docs/9.2/static/…thing_id int references epictable(mytable_key)
travail?Créez une clé primaire à incrémentation automatique dans postgresql, à l'aide d'une séquence personnalisée:
Étape 1, créez votre séquence:
Étape 2, créez votre table
Étape 3, insérez dans votre table
Étape 4, observez les rangées
Les deux lignes 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
nextval('splog_adfarm_seq')
est ennuyeux. Vous pouvezDEFAULT
plutôt taper ce paramètre, comme ceci:Pour que ce qui précède fonctionne, vous devez définir une valeur par défaut pour cette colonne clé sur la table splog_adfarm. Ce qui est plus joli.
la source
Si vous voulez le faire dans pgadmin, c'est beaucoup plus facile. Il semble dans postgressql, pour ajouter un incrémentation automatique à une colonne, nous devons d'abord créer une séquence d'incrémentation automatique et l'ajouter à la colonne requise. J'ai aimé ça.
1) Tout d'abord, vous devez vous assurer qu'il existe une clé primaire pour votre table. Conservez également le type de données de la clé primaire en bigint ou smallint. (J'ai utilisé bigint, je n'ai pas pu trouver un type de données appelé série comme mentionné dans d'autres réponses ailleurs)
2) Ajoutez ensuite une séquence en cliquant avec le bouton droit sur séquence-> ajouter une nouvelle séquence . S'il n'y a pas de données dans le tableau, laissez la séquence telle quelle, n'apportez aucune modification. Enregistrez-le. S'il existe des données existantes, ajoutez la dernière valeur ou la valeur la plus élevée dans la colonne de clé primaire à l'onglet Valeur actuelle dans les définitions, comme illustré ci-dessous.
3) Enfin, ajoutez la ligne
nextval('your_sequence_name'::regclass)
à la valeur par défaut dans votre clé primaire comme indiqué ci-dessous.Assurez-vous que le nom de la séquence est correct ici. C'est tout et l'incrémentation automatique devrait fonctionner.
la source
Si vous souhaitez utiliser des nombres dans une séquence, définissez une nouvelle séquence avec quelque chose comme
puis modifiez la table pour utiliser la séquence de l'id:
la source
J'ai essayé le script suivant pour réussir l'incrémentation automatique de la clé primaire dans PostgreSQL.
ÉDITER:
Le mot-clé SERIAL crée automatiquement une séquence pour la colonne respective.
la source
ALTER SEQUENCE dummytable_id_seq RESTART WITH 1;
et son fonctionnement.Je suis peut-être un peu en retard pour répondre à cette question, mais je travaille sur ce sujet à mon travail :)
Je voulais écrire la colonne 'a_code' = c1, c2, c3, c4 ...
J'ai d'abord ouvert une colonne avec le nom
ref_id
et le typeserial
. Ensuite, j'ai résolu mon problème avec cette commande:la source