PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Re : Général » Clé primaire auto-incrémentée » 22/03/2009 08:52:24

gleu a écrit :

Pourquoi faire simple quand on peut faire compliqué chez PostgreSQL !

Sans vouloir polémiquer, pourquoi faire standard quand on peut l'éviter chez MySQL ?

Sans vouloir polémiquer, je ne pense pas que

nextval('"CineDoc"."Festivals_Fe_Id_seq"'::regclass),

soit du standard SQL non plus ! Quitte à faire une fonction pour implémenter un truc qui n'est pas prévu par la norme SQL, autant faire simple comme MySQL avec son AUTO_INCREMENT !

serial est un pseudo type. Ce n'est pas un vrai type car il est remplacé par int (si serial) et bigint (si bigserial) et il va causer l'ajout d'une séquence et d'une valeur par défaut. Il n'est donc disponible que pour un ajout de colonne, mais pas pour une modification.

Et il manque la possibilité SMALLINT.

Du coup je me demande si c'est correctement implanté et si l'auto-incrémentation va bien s'effectuer.

Le meilleur moyen de le savoir est d'insérer une donnée dans la table et de vérifier si la colonne s'est bien incrémentée automatiquement.

Bon ben on verra ça quand j'aurai fait l'interface alors.

#2 Général » Comment modifier la clé primaire ? » 21/03/2009 13:02:53

CinePhil
Réponses : 1

Bonjour,
Je cherche comment modifier la clé primaire d'une table, soit en SQL, soit avec l'interface pgAdmin III.

Quand je sélectionne la clé primaire, pgAdmin m'affiche la requête :

ALTER TABLE "CineDoc"."Agir"
  ADD CONSTRAINT "Agir_pkey" PRIMARY KEY("A_IdFilm", "A_IdPersonne", "A_IdFonction");

Je souhaite changer l'ordre des colonnes en passant A_IdPersonne en premier.

Quand je fais un clic droit puis propriétés sur ma clé primaire, l'onglet Colonnes de la boîte de dialogue ne me permet pas de modifier.

Bien sûr, je pourrais supprimer la clé puis la recréer mais il doit bien y avoir une syntaxe de modification non ?

EDIT :
Idem pour le reste. J'ai voulu modifier une contrainte et je n'ai pas trouvé d'autre solution que de la supprimer et de la refaire.
Pas pratique !

J'ai modifié tout ce qu'il y avait à modifier par suppression puis ajout mais s'il y a une autre solution pour l'avenir, je suis preneur.
Si c'est sous pgAdmin plutôt qu'en SQL c'est encore mieux.

#3 Général » Clé primaire auto-incrémentée » 21/03/2009 12:52:48

CinePhil
Réponses : 8

Bonjour,
J'ai créé il y a quelques jours ma première BDD PostgreSQL à partir de requêtes DDL générées par le logiciel de modélisation Open ModelSphere et que j'ai dû adapter.

J'ai vu quelque part que pour CREER une table avec une clé primaire auto-incrémentée, il fallait utiliser, à la place du très pratique AUTO_INCREMENT de MySQL, le type 'serial', lequel entraîne la création automatique d'une séquence et le paramétrage de la colonne en DEFAULT nextval('nom_sequence'::regclass). Pourquoi faire simple quand on peut faire compliqué chez PostgreSQL !

Le problème est que j'ai pensé à ce détail pour la première table mais, corrigeant les bugs de mes requêtes DDL au fur et à mesure (character varying au lieu de variable character par exemple), je l'ai oublié pour les autres tables issues des entités de mon MCD.

Ces tables ont donc une clé primaire de type INTEGER ou SMALLINT mais ne sont pas auto-incrémentées.

Malheureusement, il semble qu'il soit impossible de MODIFIER le type de la colonne en 'serial' une fois la table créée ; je me suis tapé un joli message d'erreur quand j'ai essayé de le faire en SQL et le type n'est pas dans la liste proposée dans pgAdmin !

Alors j'ai fait l'effort :
- de créer une séquence sur le modèle de celle qui avait été créée automatiquement ;
- de changer la valeur par défaut de la colonne clé primaire de la table.

Pas de message d'erreur cette fois mais j'ai des doutes quand je regarde pgAdmin...

Pour la table où la clé primaire auto-incrémentée a été faite automatiquement grâce au type serial, je vois que le paramètre Séquence affiche bien le nom de la séquence et l'onglet "Objets dépendants" affiche bien le nom de la séquence.

Pour la table où j'ai voulu faire de même manuellement, ces informations n'apparaissent pas !

Du coup je me demande si c'est correctement implanté et si l'auto-incrémentation va bien s'effectuer.

Pied de page des forums

Propulsé par FluxBB