banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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 hmm

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 ! big_smile

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 big_smile

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 smile

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

 

Pied de page des forums

Powered by FluxBB