#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: 186
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: 1218
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: 186
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


