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

#1 21/09/2012 00:10:46

phicarre
Membre

Traduction de auto_increment

Dans mysql j'ai:

CREATE TABLE `membres` (
`Id_Membre` int(10) NOT NULL AUTO_INCREMENT,
...
PRIMARY KEY (`Id_Membre`)
) ENGINE=InnoDB AUTO_INCREMENT=191 DEFAULT CHARSET=latin1 ROW_FORMAT=FIXED;

Que je traduis par:

CREATE TABLE membres
(
  id_membre serial not null,
...
primary key( id_membre)
)

Après la migration, comment indiquer qu'id_membre devra prendre la valeur 191 lors d'une insertion ?

Hors ligne

#2 21/09/2012 01:36:34

MitsuTomoe
Membre

Re : Traduction de auto_increment

Une séquence est associée au champ, et pg a des fonctions pour manipuler les séquences.
Exemple :
Création de la table :

CREATE TABLE sspact (
    id_sspact integer NOT NULL,
 ...

Création de la séquence :

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

Modifier le prochain numéro  :

SELECT setval('sspact_id_sspact_seq', 399, true); -- true signifie que le prochain numéro donné sera 400 , false ==> 399

Association champ/séquence :

ALTER TABLE ONLY sspact ALTER COLUMN id_sspact SET DEFAULT nextval('sspact_id_sspact_seq'::regclass);

Toutes les autres fonctions sont là :  Doc fonctions de séquence


Alex

Dernière modification par MitsuTomoe (21/09/2012 01:38:29)

Hors ligne

#3 21/09/2012 17:26:09

phicarre
Membre

Re : Traduction de auto_increment

Merci mais ça à l'air d'être bien compliqué ...
Pourquoi les outils de migration ne font pas ça !

Dernière modification par phicarre (21/09/2012 17:27:00)

Hors ligne

#4 22/09/2012 04:52:27

Marc Cousin
Membre

Re : Traduction de auto_increment

Je présume que certains le font.

Et pour ceux qui ne le font pas, je vois bien deux explications:

- La méthode au dessus marche bien.
- Les séquences sous PostgreSQL permettent beaucoup plus que les autoincréments sous MySQL. C'est d'ailleurs pour cela aussi que c'est plus compliqué à manipuler, du moins si ça n'a pas été fait dès le départ (si on démarre directement avec une base vide, on a le pseudo-type serial qui crée la colonne en type integer, la séquence associée, les lie, et met la valeur par défaut de la colonne à nextval de la séquence)


Marc.

Hors ligne

Pied de page des forums