#1 Thu 20 August 2015 09:52
- Bajbouja!2
- Participant occasionnel
- Date d'inscription: 22 Jul 2015
- Messages: 16
Sequence pour incrémenter fid
Salut tout le monde,
J'ai une table avec une colonne fid dont je veux appliquer une sequence pour incrémenter cet attribut à la création de nouveau objet.
Code:
CREATE SEQUENCE te_relation3.traceavctube_fid_seq INCREMENT 1 MINVALUE 150040 MAXVALUE 9223372036854775807 START 152576 CACHE 1; ALTER TABLE te_relation3.traceavctube_fid_seq OWNER TO postgres;
Malheureusement ça ne marche pas
Si jamais il existe dejà les fid de 150040 --> 152575 c'est pour ça j'ai mis un tel intervalle..
Voiçi le code de ma fonction rebuilt_sequence()
Code:
-- Function: public.rebuilt_sequences() -- DROP FUNCTION public.rebuilt_sequences(); CREATE OR REPLACE FUNCTION public.rebuilt_sequences() RETURNS integer AS $BODY$ DECLARE sequencedefs RECORD; c integer ; BEGIN FOR sequencedefs IN Select constraint_column_usage.table_schema as schemaname, constraint_column_usage.table_name as tablename, constraint_column_usage.column_name as columnname, replace(replace(columns.column_default,'''::regclass)',''),'nextval(''','') as sequencename from information_schema.constraint_column_usage, information_schema.columns where constraint_column_usage.table_schema not in ('public', 'topology') AND columns.table_schema not in ('public', 'topology') AND columns.table_schema=constraint_column_usage.table_schema AND columns.table_name=constraint_column_usage.table_name AND constraint_column_usage.column_name = columns.column_name AND columns.column_default is not null order by schemaname, tablename, columnname LOOP EXECUTE 'select max('||sequencedefs.columnname||') from ' || sequencedefs.schemaname || '.' || sequencedefs.tablename INTO c; IF c is null THEN c = 0; END IF; IF c is not null THEN c = c+ 1; END IF; EXECUTE 'alter sequence ' || sequencedefs.sequencename ||' restart with ' || c; END LOOP; RETURN 1; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION public.rebuilt_sequences() OWNER TO postgres; COMMENT ON FUNCTION public.rebuilt_sequences() IS 'Réinitialisation de toutes les séquences de l''instance ; mise à jour de la valeur max.';
Merci d'avance pour votre aide ^^
Une belle journée à vous tous !
Hors ligne
#2 Thu 20 August 2015 10:53
- Bajbouja!2
- Participant occasionnel
- Date d'inscription: 22 Jul 2015
- Messages: 16
Re: Sequence pour incrémenter fid
Résolu !
J'ai oublié de mettre la valeur par defaut dans les propriétés du champs fid
Code:
nextval('te_relation3.traceavctube_fid_seq'::regclass)
A+
Hors ligne
#3 Thu 20 August 2015 11:12
- nico-29
- Participant assidu
- Lieu: Brest
- Date d'inscription: 2 Jun 2006
- Messages: 185
Re: Sequence pour incrémenter fid
il existe pas un type de champ Auto-increment ? il me semble que ça existe sous PostgreSQL
Nico
Hors ligne
#4 Thu 20 August 2015 11:15
- Bajbouja!2
- Participant occasionnel
- Date d'inscription: 22 Jul 2015
- Messages: 16
Re: Sequence pour incrémenter fid
Salut,
Merci pour votre réponse..
Je viens de voir il n y'a pas ce type de champ !
Vous êtes sûre ?
Cordialement.
Hors ligne
#5 Thu 20 August 2015 11:18
- Bajbouja!2
- Participant occasionnel
- Date d'inscription: 22 Jul 2015
- Messages: 16
Re: Sequence pour incrémenter fid
Ah oui oui c'est le type serial ! Pardon
Mais bon, de toute façon je peux pas fixer un intervalle avec ça ...J'ai déjà beaucoup de valeur existante c'est pour ça je cherche à paramétrer l'incrémentation
Peace and Love
Hors ligne
#6 Thu 20 August 2015 11:21
- tumasgiu
- Membre
- Lieu: Ajaccio
- Date d'inscription: 5 Jul 2010
- Messages: 1160
Re: Sequence pour incrémenter fid
Le serial n'est pas un type mais juste un raccourci pour créer une séquence et une colonne de type entière non nulle avec une valeur par défaut qui appelle la fonction nextval de cette séquence.
Love & Peace.
Hors ligne
#7 Thu 20 August 2015 11:25
- Bajbouja!2
- Participant occasionnel
- Date d'inscription: 22 Jul 2015
- Messages: 16
Re: Sequence pour incrémenter fid
Merci Tumasgiu pour ces précisions !
Peace
Hors ligne
#8 Thu 20 August 2015 14:12
- nico-29
- Participant assidu
- Lieu: Brest
- Date d'inscription: 2 Jun 2006
- Messages: 185
Re: Sequence pour incrémenter fid
si c'est juste pour un ID de l'objet, est-ce important que les ID soient croissant suivant l'ordre de création des objets ?
et il me semble de toute façon qu'avec le type serial, si on a dans la base des ID existants qui ont les valeurs 1 et 3, quand on crée un nouvel objet, il aura l'ID 4 (l'ID 2 ne sera pas utilisé).
Nico
Hors ligne