Vous n'êtes pas identifié(e).
Pages : 1
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
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
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
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
Pages : 1