297 votes

Comment définir une clé primaire auto incrémentée dans PostgreSQL ?

J'ai une table dans PostgreSQL avec de nombreuses 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 ou créer une clé primaire auto-incrémentée dans PostgreSQL sans recréer la table ?

4 votes

Dans Postgres 10 ou plus, considérez qu'un IDENTITY au lieu d'une colonne serial : stackoverflow.com/a/9875517/939860

3voto

Baskovli Points 74

Les étapes pour le faire sur PgAdmin :

  • CREATE SEQUENCE sequnence_title START 1 ; // si la table existe, last id
  • Ajouter cette séquence à la clé primaire, table - properties - columns - column_id(primary key) edit - Constraints - Ajouter nextval('sequnence_title'::regclass) à le champ par défaut.

2voto

Asad Shakeel Points 130

J'ai essayé le script suivant pour réussir à auto-incrémenter la clé primaire dans PostgreSQL.

CREATE SEQUENCE dummy_id_seq
    START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;

CREATE table dummyTable (
    id bigint DEFAULT nextval('dummy_id_seq'::regclass) NOT NULL,
    name character varying(50)
);

EDIT :

CREATE table dummyTable (
    id SERIAL NOT NULL,
    name character varying(50)
)

Le mot-clé SERIAL crée automatiquement une séquence pour la colonne respective.

0 votes

Peut-on réinitialiser un SERIAL comme on le fait pour une SEQUENCE ?

1 votes

Oui, j'ai vérifié avec ALTER SEQUENCE dummytable_id_seq RESTART WITH 1; et son fonctionnement.

0voto

user5838061 Points 1

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...

Tout d'abord, j'ai ouvert une colonne avec le nom ref_id et le type serial . Puis j'ai résolu mon problème avec cette commande :

update myschema.mytable set a_code=cast('c'||"ref_id" as text)

0 votes

Est-il possible de créer une clé primaire (colonne existante) dans une table sans ajouter de nouvelle colonne ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X