dans ma bd j'ai mal nommé deux séquences, comment faire pour les renommer en gardant le lien avec l'id ?
je n'ai guère d'aide à t'apporter, par contre je ne voudrais pas perdre une occasion de m'instruire : qu'est-ce qu'une séquence ?
yvon.thoravalNO-SPAM
Antoine Dinimant wrote:
je n'ai guère d'aide à t'apporter, par contre je ne voudrais pas perdre une occasion de m'instruire : qu'est-ce qu'une séquence ?
Avec postgreSQL, il n'y a pas d'auto-incrémentation des index, il faut créer une séquence : CREATE SEQUENCE public.ma_sequence_seq INCREMENT 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1;
puis l'utilser :
CREATE TABLE public.ma_table ( mon_id int4 DEFAULT nextval('"ma_sequence_seq"'::text) NOT NULL, texte_bidon varchar(50) NOT NULL, CONSTRAINT ma_table_pkey PRIMARY KEY (mon_id) ) WITH OIDS;
j'avoue ne pas avoir pigé pourquoi l'auto-incrémentation n'a pas été implémentée.... il doit y avoir des choses plus difficiles à faire sur PostgreSQL... -- yt
Antoine Dinimant <antoun@free.fr> wrote:
je n'ai guère d'aide à t'apporter, par contre je ne voudrais pas perdre
une occasion de m'instruire : qu'est-ce qu'une séquence ?
Avec postgreSQL, il n'y a pas d'auto-incrémentation des index, il faut
créer une séquence :
CREATE SEQUENCE public.ma_sequence_seq INCREMENT 1 MINVALUE 1
MAXVALUE 2147483647 CACHE 1;
puis l'utilser :
CREATE TABLE public.ma_table (
mon_id int4 DEFAULT nextval('"ma_sequence_seq"'::text) NOT NULL,
texte_bidon varchar(50) NOT NULL,
CONSTRAINT ma_table_pkey PRIMARY KEY (mon_id)
) WITH OIDS;
j'avoue ne pas avoir pigé pourquoi l'auto-incrémentation n'a pas été
implémentée....
il doit y avoir des choses plus difficiles à faire sur PostgreSQL...
--
yt
je n'ai guère d'aide à t'apporter, par contre je ne voudrais pas perdre une occasion de m'instruire : qu'est-ce qu'une séquence ?
Avec postgreSQL, il n'y a pas d'auto-incrémentation des index, il faut créer une séquence : CREATE SEQUENCE public.ma_sequence_seq INCREMENT 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1;
puis l'utilser :
CREATE TABLE public.ma_table ( mon_id int4 DEFAULT nextval('"ma_sequence_seq"'::text) NOT NULL, texte_bidon varchar(50) NOT NULL, CONSTRAINT ma_table_pkey PRIMARY KEY (mon_id) ) WITH OIDS;
j'avoue ne pas avoir pigé pourquoi l'auto-incrémentation n'a pas été implémentée.... il doit y avoir des choses plus difficiles à faire sur PostgreSQL... -- yt
"Yvon Thoraval" a écrit dans le message de news: 1gdw5yi.1obguy0105qwvoN%
dans ma bd j'ai mal nommé deux séquences, comment faire pour les renommer en gardant le lien avec l'id ?
soit: tu fais un pg_dump puis tu edites le fichier.... et apres tu reinstalle ta base.
soit tu te connecte en tant que postgres sur le base template1 et la je sais plus trop dans quelle tables les infos sont stockées, mais elles sont quelques part :) tu trouveras sans doute dans le doc de postgresql.
Etienne
"Yvon Thoraval" <yvon.thoravalNO-SPAM@free.fr> a écrit dans le message de
news: 1gdw5yi.1obguy0105qwvoN%yvon.thoravalNO-SPAM@free.fr...
dans ma bd j'ai mal nommé deux séquences, comment faire pour les
renommer en gardant le lien avec l'id ?
soit:
tu fais un pg_dump
puis tu edites le fichier....
et apres tu reinstalle ta base.
soit tu te connecte en tant que postgres
sur le base template1
et la je sais plus trop dans quelle tables les infos sont stockées, mais
elles sont quelques part :)
tu trouveras sans doute dans le doc de postgresql.
"Yvon Thoraval" a écrit dans le message de news: 1gdw5yi.1obguy0105qwvoN%
dans ma bd j'ai mal nommé deux séquences, comment faire pour les renommer en gardant le lien avec l'id ?
soit: tu fais un pg_dump puis tu edites le fichier.... et apres tu reinstalle ta base.
soit tu te connecte en tant que postgres sur le base template1 et la je sais plus trop dans quelle tables les infos sont stockées, mais elles sont quelques part :) tu trouveras sans doute dans le doc de postgresql.
Etienne
yvon.thoravalNO-SPAM
Etienne SOBOLE wrote:
et la je sais plus trop dans quelle tables les infos sont stockées, mais elles sont quelques part :) tu trouveras sans doute dans le doc de postgresql.
ce que je pense faire :
renommer la colonne *_id -> *_id_old ; (re)créer la colonne *_id en copiant les bons id ; créer une séquence avec le bon nom et l'attribuer à *_id ; après verif, drop anything unused ;) -- yt
Etienne SOBOLE <e.news@webshaker.net> wrote:
et la je sais plus trop dans quelle tables les infos sont stockées, mais
elles sont quelques part :)
tu trouveras sans doute dans le doc de postgresql.
ce que je pense faire :
renommer la colonne *_id -> *_id_old ;
(re)créer la colonne *_id en copiant les bons id ;
créer une séquence avec le bon nom et l'attribuer à *_id ;
après verif, drop anything unused ;)
--
yt
et la je sais plus trop dans quelle tables les infos sont stockées, mais elles sont quelques part :) tu trouveras sans doute dans le doc de postgresql.
ce que je pense faire :
renommer la colonne *_id -> *_id_old ; (re)créer la colonne *_id en copiant les bons id ; créer une séquence avec le bon nom et l'attribuer à *_id ; après verif, drop anything unused ;) -- yt
Patrick
Avec postgreSQL, il n'y a pas d'auto-incrémentation des index, il faut créer une séquence :
CREATE SEQUENCE public.ma_sequence_seq; suffit pour les valeurs par défaut.
puis l'utilser :
CREATE TABLE public.ma_table ( mon_id int4 DEFAULT nextval('"ma_sequence_seq"'::text) NOT NULL, texte_bidon varchar(50) NOT NULL, CONSTRAINT ma_table_pkey PRIMARY KEY (mon_id) ) WITH OIDS;
j'avoue ne pas avoir pigé pourquoi l'auto-incrémentation n'a pas été implémentée....
Cf le type SERIAL (qui créé une séquence).
Patrick.
Avec postgreSQL, il n'y a pas d'auto-incrémentation des index, il faut
créer une séquence :
CREATE SEQUENCE public.ma_sequence_seq;
suffit pour les valeurs par défaut.
puis l'utilser :
CREATE TABLE public.ma_table (
mon_id int4 DEFAULT nextval('"ma_sequence_seq"'::text) NOT NULL,
texte_bidon varchar(50) NOT NULL,
CONSTRAINT ma_table_pkey PRIMARY KEY (mon_id) ) WITH OIDS;
j'avoue ne pas avoir pigé pourquoi l'auto-incrémentation n'a pas été
implémentée....
On Sun, 16 May 2004 18:42:55 +0200 (Yvon Thoraval) wrote:
dans ma bd j'ai mal nommé deux séquences, comment faire pour les renommer en gardant le lien avec l'id ?
exemple :
table : t_language_lang id : lang_id seq : t-language_seq (au lieu de t_language_lang_seq)
le problème est que je veux retrouver :
select currval('Sequence_name'); (donc retrouver la valeur du dernier id)
après avoir retrouvé le nom de la séquence par :
SELECT relname FROM pg_class where relname ~ '^t_language_lang' and relkind = 'S' ;
je souhaite cela car les arguments passés à mon prog contiennent déjà le nom de la table... -- yt
Bonjour, Je ferais :
SELECT max(lang_id) t_language_lang; --Va renvoyer une valeur n
DROP SEQUENCE t_language_lang_seq; CREATE SEQUENCE t-language_seq START n+1;
Mais il faut modifier la structure de la table (je suppose que vous utilisez postgresql):
Avant tout un pgdump voir le man pour sauvegarder uniquement le contenu de t_language_lang et pas sa structure. Et un de la base en entier(structure et données) pour être sûr! ;)
Ensuite modifier l'id après avoir droppé la table: CREATE TABLE t_language_lang ( lang_id INT4 DEFAULT NEXTVAL('t-language_seq') PRIMARY KEY, ...
Ensuite avec la commande COPY (voir la doc) importer le fichier crée par pgdump.
Ou bien un :
ALTER TABLE [ ONLY ] table [ * ] ALTER [ COLUMN ] column { SET DEFAULT value | DROP DEFAULT }
!!!Si il y a des tables hérités...Elles utilisent la même séquence.
Benoît
Ps. Voici un extrait de la CHARTE DU FORUM fr.comp.applications.sgbd
Étant donné le grand nombre de S.G.B.D. existant, pour les questions relatives à un produit spécifique, il est recommandé de positionner des balises pertinentes dans le sujet, en précisant les numéros de versions dans le corps de l'article.
Exemples de [BALISES] : [Oracle][AIX] [SQL] [Objet] [Merise] [Designer/2000][WinNT] [Progress][DBA] [DB2] etc.
Raison : il n'existe pas de forum dédié aux discussions sur les bases de données.
[PostgreSQL]le vrais l'unique! ;)
On Sun, 16 May 2004 18:42:55 +0200
yvon.thoravalNO-SPAM@free.fr (Yvon Thoraval) wrote:
dans ma bd j'ai mal nommé deux séquences, comment faire pour les
renommer en gardant le lien avec l'id ?
exemple :
table : t_language_lang
id : lang_id
seq : t-language_seq (au lieu de t_language_lang_seq)
le problème est que je veux retrouver :
select currval('Sequence_name'); (donc retrouver la valeur du
dernier id)
après avoir retrouvé le nom de la séquence par :
SELECT relname FROM pg_class where relname ~ '^t_language_lang' and
relkind = 'S' ;
je souhaite cela car les arguments passés à mon prog contiennent
déjà le nom de la table...
--
yt
Bonjour,
Je ferais :
SELECT max(lang_id) t_language_lang;
--Va renvoyer une valeur n
DROP SEQUENCE t_language_lang_seq;
CREATE SEQUENCE t-language_seq START n+1;
Mais il faut modifier la structure de la table (je suppose que vous
utilisez postgresql):
Avant tout un pgdump voir le man pour sauvegarder uniquement le
contenu de t_language_lang et pas sa structure. Et un de la base en
entier(structure et données) pour être sûr! ;)
Ensuite modifier l'id après avoir droppé la table:
CREATE TABLE t_language_lang
(
lang_id INT4 DEFAULT NEXTVAL('t-language_seq') PRIMARY KEY,
...
Ensuite avec la commande COPY (voir la doc) importer le fichier crée
par pgdump.
Ou bien un :
ALTER TABLE [ ONLY ] table [ * ]
ALTER [ COLUMN ] column { SET DEFAULT value | DROP DEFAULT }
!!!Si il y a des tables hérités...Elles utilisent la même séquence.
Benoît
Ps.
Voici un extrait de la CHARTE DU FORUM fr.comp.applications.sgbd
Étant donné le grand nombre de S.G.B.D. existant, pour les questions
relatives à un produit spécifique, il est recommandé de positionner
des balises pertinentes dans le sujet, en précisant les numéros de
versions dans le corps de l'article.
Exemples de [BALISES] :
[Oracle][AIX]
[SQL]
[Objet]
[Merise]
[Designer/2000][WinNT]
[Progress][DBA]
[DB2]
etc.
Raison : il n'existe pas de forum dédié aux discussions sur les bases
de données.
On Sun, 16 May 2004 18:42:55 +0200 (Yvon Thoraval) wrote:
dans ma bd j'ai mal nommé deux séquences, comment faire pour les renommer en gardant le lien avec l'id ?
exemple :
table : t_language_lang id : lang_id seq : t-language_seq (au lieu de t_language_lang_seq)
le problème est que je veux retrouver :
select currval('Sequence_name'); (donc retrouver la valeur du dernier id)
après avoir retrouvé le nom de la séquence par :
SELECT relname FROM pg_class where relname ~ '^t_language_lang' and relkind = 'S' ;
je souhaite cela car les arguments passés à mon prog contiennent déjà le nom de la table... -- yt
Bonjour, Je ferais :
SELECT max(lang_id) t_language_lang; --Va renvoyer une valeur n
DROP SEQUENCE t_language_lang_seq; CREATE SEQUENCE t-language_seq START n+1;
Mais il faut modifier la structure de la table (je suppose que vous utilisez postgresql):
Avant tout un pgdump voir le man pour sauvegarder uniquement le contenu de t_language_lang et pas sa structure. Et un de la base en entier(structure et données) pour être sûr! ;)
Ensuite modifier l'id après avoir droppé la table: CREATE TABLE t_language_lang ( lang_id INT4 DEFAULT NEXTVAL('t-language_seq') PRIMARY KEY, ...
Ensuite avec la commande COPY (voir la doc) importer le fichier crée par pgdump.
Ou bien un :
ALTER TABLE [ ONLY ] table [ * ] ALTER [ COLUMN ] column { SET DEFAULT value | DROP DEFAULT }
!!!Si il y a des tables hérités...Elles utilisent la même séquence.
Benoît
Ps. Voici un extrait de la CHARTE DU FORUM fr.comp.applications.sgbd
Étant donné le grand nombre de S.G.B.D. existant, pour les questions relatives à un produit spécifique, il est recommandé de positionner des balises pertinentes dans le sujet, en précisant les numéros de versions dans le corps de l'article.
Exemples de [BALISES] : [Oracle][AIX] [SQL] [Objet] [Merise] [Designer/2000][WinNT] [Progress][DBA] [DB2] etc.
Raison : il n'existe pas de forum dédié aux discussions sur les bases de données.
[PostgreSQL]le vrais l'unique! ;)
Banoît Barbier
On Sun, 16 May 2004 18:42:55 +0200 (Yvon Thoraval) wrote:
dans ma bd j'ai mal nommé deux séquences, comment faire pour les renommer en gardant le lien avec l'id ?
exemple :
table : t_language_lang id : lang_id seq : t-language_seq (au lieu de t_language_lang_seq)
le problème est que je veux retrouver :
select currval('Sequence_name'); (donc retrouver la valeur du dernier id)
après avoir retrouvé le nom de la séquence par :
SELECT relname FROM pg_class where relname ~ '^t_language_lang' and relkind = 'S' ;
Bonjour, Je ferais :
SELECT max(lang_id) t_language_lang; --Va renvoyer une valeur n
DROP SEQUENCE t_language_lang_seq; CREATE SEQUENCE t-language_seq START n+1;
Mais il faut modifier la structure de la table (je suppose que vous utilisez postgresql):
Avant tout un pgdump voir le man pour sauvegarder uniquement le contenu de t_language_lang et pas sa structure. Et un de la base en entier(structure et données) pour être sûr! ;)
Ensuite modifier l'id après avoir droppé la table: CREATE TABLE t_language_lang ( lang_id INT4 DEFAULT NEXTVAL('t-language_seq') PRIMARY KEY, ...
Ensuite avec la commande COPY (voir la doc) importer le fichier crée par pgdump.
!!!Si il y a des tables hérités...Elles utilisent la même séquence.
Benoît
Ps. Voici un extrait de la CHARTE DU FORUM fr.comp.applications.sgbd
Étant donné le grand nombre de S.G.B.D. existant, pour les questions relatives à un produit spécifique, il est recommandé de positionner des balises pertinentes dans le sujet, en précisant les numéros de versions dans le corps de l'article.
Exemples de [BALISES] : [Oracle][AIX] [SQL] [Objet] [Merise] [Designer/2000][WinNT] [Progress][DBA] [DB2] etc.
Raison : il n'existe pas de forum dédié aux discussions sur les bases de données.
On Sun, 16 May 2004 18:42:55 +0200
yvon.thoravalNO-SPAM@free.fr (Yvon Thoraval) wrote:
dans ma bd j'ai mal nommé deux séquences, comment faire pour les
renommer en gardant le lien avec l'id ?
exemple :
table : t_language_lang
id : lang_id
seq : t-language_seq (au lieu de t_language_lang_seq)
le problème est que je veux retrouver :
select currval('Sequence_name'); (donc retrouver la valeur du
dernier id)
après avoir retrouvé le nom de la séquence par :
SELECT relname FROM pg_class where relname ~ '^t_language_lang' and
relkind = 'S' ;
Bonjour,
Je ferais :
SELECT max(lang_id) t_language_lang;
--Va renvoyer une valeur n
DROP SEQUENCE t_language_lang_seq;
CREATE SEQUENCE t-language_seq START n+1;
Mais il faut modifier la structure de la table (je suppose que vous
utilisez postgresql):
Avant tout un pgdump voir le man pour sauvegarder uniquement le
contenu de t_language_lang et pas sa structure. Et un de la base en
entier(structure et données) pour être sûr! ;)
Ensuite modifier l'id après avoir droppé la table:
CREATE TABLE t_language_lang
(
lang_id INT4 DEFAULT NEXTVAL('t-language_seq') PRIMARY KEY,
...
Ensuite avec la commande COPY (voir la doc) importer le fichier crée
par pgdump.
!!!Si il y a des tables hérités...Elles utilisent la même séquence.
Benoît
Ps.
Voici un extrait de la CHARTE DU FORUM fr.comp.applications.sgbd
Étant donné le grand nombre de S.G.B.D. existant, pour les questions
relatives à un produit spécifique, il est recommandé de positionner
des balises pertinentes dans le sujet, en précisant les numéros de
versions dans le corps de l'article.
Exemples de [BALISES] :
[Oracle][AIX]
[SQL]
[Objet]
[Merise]
[Designer/2000][WinNT]
[Progress][DBA]
[DB2]
etc.
Raison : il n'existe pas de forum dédié aux discussions sur les bases
de données.
On Sun, 16 May 2004 18:42:55 +0200 (Yvon Thoraval) wrote:
dans ma bd j'ai mal nommé deux séquences, comment faire pour les renommer en gardant le lien avec l'id ?
exemple :
table : t_language_lang id : lang_id seq : t-language_seq (au lieu de t_language_lang_seq)
le problème est que je veux retrouver :
select currval('Sequence_name'); (donc retrouver la valeur du dernier id)
après avoir retrouvé le nom de la séquence par :
SELECT relname FROM pg_class where relname ~ '^t_language_lang' and relkind = 'S' ;
Bonjour, Je ferais :
SELECT max(lang_id) t_language_lang; --Va renvoyer une valeur n
DROP SEQUENCE t_language_lang_seq; CREATE SEQUENCE t-language_seq START n+1;
Mais il faut modifier la structure de la table (je suppose que vous utilisez postgresql):
Avant tout un pgdump voir le man pour sauvegarder uniquement le contenu de t_language_lang et pas sa structure. Et un de la base en entier(structure et données) pour être sûr! ;)
Ensuite modifier l'id après avoir droppé la table: CREATE TABLE t_language_lang ( lang_id INT4 DEFAULT NEXTVAL('t-language_seq') PRIMARY KEY, ...
Ensuite avec la commande COPY (voir la doc) importer le fichier crée par pgdump.
!!!Si il y a des tables hérités...Elles utilisent la même séquence.
Benoît
Ps. Voici un extrait de la CHARTE DU FORUM fr.comp.applications.sgbd
Étant donné le grand nombre de S.G.B.D. existant, pour les questions relatives à un produit spécifique, il est recommandé de positionner des balises pertinentes dans le sujet, en précisant les numéros de versions dans le corps de l'article.
Exemples de [BALISES] : [Oracle][AIX] [SQL] [Objet] [Merise] [Designer/2000][WinNT] [Progress][DBA] [DB2] etc.
Raison : il n'existe pas de forum dédié aux discussions sur les bases de données.
yvon.thoravalNO-SPAM
Banoît Barbier wrote:
SELECT max(lang_id) t_language_lang; --Va renvoyer une valeur n
DROP SEQUENCE t_language_lang_seq; CREATE SEQUENCE t-language_seq START n+1;
oui, c'est bien sur PostgreSQL...
il ne veut pas droper l'ancienne séquence, pourtant c'est bien la nouvelle qui est prise en compte car, le n , je l'ai arrondi à la centaine supérieure, histoire de vérifier, par l'id qu'elle était bien prise en compte.
si j'essaie de retrouver, par pg_class qu'elle la séquence attribuée à cette colonne, je retoruve l'ancienne... -- yt
Banoît Barbier <benoit.br@skynet.be> wrote:
SELECT max(lang_id) t_language_lang;
--Va renvoyer une valeur n
DROP SEQUENCE t_language_lang_seq;
CREATE SEQUENCE t-language_seq START n+1;
oui, c'est bien sur PostgreSQL...
il ne veut pas droper l'ancienne séquence, pourtant c'est bien la
nouvelle qui est prise en compte car, le n , je l'ai arrondi à la
centaine supérieure, histoire de vérifier, par l'id qu'elle était bien
prise en compte.
si j'essaie de retrouver, par pg_class qu'elle la séquence attribuée à
cette colonne, je retoruve l'ancienne...
--
yt
SELECT max(lang_id) t_language_lang; --Va renvoyer une valeur n
DROP SEQUENCE t_language_lang_seq; CREATE SEQUENCE t-language_seq START n+1;
oui, c'est bien sur PostgreSQL...
il ne veut pas droper l'ancienne séquence, pourtant c'est bien la nouvelle qui est prise en compte car, le n , je l'ai arrondi à la centaine supérieure, histoire de vérifier, par l'id qu'elle était bien prise en compte.
si j'essaie de retrouver, par pg_class qu'elle la séquence attribuée à cette colonne, je retoruve l'ancienne... -- yt