PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Re : PL/pgSQL » inserer dans une table à partir de plusieurs tables » 19/05/2014 17:14:20

le seul lien entre table4, table2 et table 3 est qu'ils contiennent des données qui seront insérées dans la table1
donc je fais insert puis update  et cela via un trigger ou je récupére le résultat du mise à jour  dans un curseur ?

#2 Re : PL/pgSQL » inserer dans une table à partir de plusieurs tables » 19/05/2014 16:13:54

si non y'a t-il une autre solution ? j'arrive pas à le résoudre

#3 Re : PL/pgSQL » inserer dans une table à partir de plusieurs tables » 19/05/2014 13:00:58

merci rjuju pour tes explications

comment faire alors pour remplir une table à partier de plusieurs tables

et si j'ai une autre table4(col1,col3)

insert into table1(col1,col2,col3,col4,col4,col5,col6)

select col1,col2
from table4,table2
where table4.col1 = table2.col1

select col5 , col6
from table3,table4
where table2.col3 = table4.col3

#4 PL/pgSQL » inserer dans une table à partir de plusieurs tables » 19/05/2014 12:29:31

tatou
Réponses : 6

Bonjour Postgresql Pro   

Je serais reconnaissante si tu peux m'aider
Je veux insérer dans une table des données à partie des autres tables

exple

j'ai une table1(col1,col2,col3,col4,col4,col5,col6)

et une table2(col1,col2)
          table3(col3,col4,col5)

j'ai essayé avec ce bout du code mais pas de sucées :
insert into table1(col1,col2,col3,col4,col4,col5,col6)

select col2
from table2
where table2.col1 = table1.col1

select col5 , col6
from table2
where table2.col3 = table1.3

comment faire est ce  je dois travailler avec les curseurs ?

merci pour ton aide appréciée

#5 Re : PL/pgSQL » Postgresql & cluster » 08/05/2014 14:44:03

merci pour ta réponse,
comment on peut le  résoudre !! parceque je veux créer un cluster indépendemment des indexes ainsi quelle est l'utilité de créer cluster sur les indexes si on est limité par le fait que ne fait pas la maintenance des ordres !!

#6 PL/pgSQL » Postgresql & cluster » 08/05/2014 12:59:46

tatou
Réponses : 2

Bonjour postgreSQL pro,

je veux créer des tables clusters, est ce que c'est possible avec postgresql ainsi comment on peut augmenter la performance avec cluster

merci pour ton aide appréciée

#7 Re : PL/pgSQL » héritage , des tables , containtes clé étrangére » 02/05/2014 00:24:03

merci gleu pour ton aide
tu peux encore m'expliquer le concept partitionnement postgresql;  j'ai cherché sur le site officiel du postgreSQFR mais  j'arrive pas à le  comprendre !

#8 Re : PL/pgSQL » héritage , des tables , containtes clé étrangére » 01/05/2014 19:54:39

merci gleu pour ces explications smile
alors tu me recommande de travailler avec les clés étrangéres tt en eliminat l'héritage et pour les indexes comment doit-on choisir les colonnes indexés ?
et concernant la répitition des données quel est son impact sur la performance de la base de données ??

#9 Re : PL/pgSQL » héritage , des tables , containtes clé étrangére » 01/05/2014 18:59:13

des requêtes imbriquées  et des requets select paramétré

je vais insérer des données dans la tables fils alors la table mére sera remplie en respectant l'héritage
de mem je veux que les clés étrangéres  seront héritées dans les tables fils

exple de requete :

select attribut1

from table (table dont le quel référence la table mére )

where   clé_étrangére de la table fils = clé primaire de la table référencée  //  ça cause un erreur car la table fils n'hérite pas la clé étrangére !!

#10 Re : PL/pgSQL » héritage , des tables , containtes clé étrangére » 01/05/2014 17:48:42

merci gleu pour ta réponse
au fait j'ai choisi l'héritage pour éliminer la répétition des données puisque les données dans la table mére sont les mem dans les tables fils afin de perfomer la conception de la base de données alors je définis ainsi lec clés étrangéres dans la table mére ??

pour les données : quand je vais populer la table mére je veux que de mem les tables fils sera rempli avec les valeurs des champs table mére

#11 PL/pgSQL » héritage , des tables , containtes clé étrangére » 01/05/2014 16:23:43

tatou
Réponses : 9

Bonjour postgresql ¨Pro smile,

J'aimerais concepter ma base de données en utilisant l'héritage j'éssaye avec un petit exemple :

---------------- Table: mere  qui références à une table num et a deux fils--------------------------------

-- DROP TABLE mere;

CREATE TABLE mere
(
  id serial NOT NULL,
  num integer,
  nbre integer,
  CONSTRAINT mere_pkey PRIMARY KEY (id),
  CONSTRAINT mere_num_fkey FOREIGN KEY (num)
      REFERENCES num (num) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
  OIDS=FALSE
);
ALTER TABLE mere
  OWNER TO postgres;

------------------ Table: num------------------------------------

-- DROP TABLE num;

CREATE TABLE num
(
  num integer NOT NULL,
  CONSTRAINT num_pkey PRIMARY KEY (num)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE num
  OWNER TO postgres;

-- -----------------------Table: fils1------------------------------------------------

-- DROP TABLE fils1;

CREATE TABLE fils1
(
-- Hérité(e) from table mere:  id integer NOT NULL DEFAULT nextval('mere_id_seq'::regclass),
-- Hérité(e) from table mere:  num integer,
-- Hérité(e) from table mere:  nbre integer,
  statu integer,
  CONSTRAINT fils1_pkey PRIMARY KEY (id)
)
INHERITS (mere)
WITH (
  OIDS=FALSE
);
ALTER TABLE fils1
  OWNER TO postgres;

-- -----------------------------------Table: fils2-------------------------------------------------

-- DROP TABLE fils2;

CREATE TABLE fils2
(
-- Hérité(e) from table mere:  id integer NOT NULL DEFAULT nextval('mere_id_seq'::regclass),
-- Hérité(e) from table mere:  num integer,
-- Hérité(e) from table mere:  nbre integer,
  moy integer,
  CONSTRAINT fils2_pkey PRIMARY KEY (id)
)
INHERITS (mere)
WITH (
  OIDS=FALSE
);
ALTER TABLE fils2
  OWNER TO postgres;

mon probléme est que les deux tables fils n'héritent pas la contrainte de la clé étrangére , ni les données de la table mere   sad
je serais rreconnaissante si tu peux m'aider de le résoudre
merci d'avance pour ton aide appréciée

#12 Re : PL/pgSQL » fonction » 30/04/2014 11:38:31

merci arthurr pour ton aide appréciée

#13 Re : PL/pgSQL » fonction » 29/04/2014 14:24:51

merciii arthurr pour ta réponse alors ça veut qu'on doit définit le nombre 465551 comme étant décimal ?

et comme conséquence le code de ma fonction doit etre comme ça ?
CREATE FUNCTION unite_s ( xdecimal ) // au lieu de x integer on déclare x decimal
returns decimal (7,3)
AS

$corps$

Begin

return (  x /1000) ;

end;

$corps$

LANGUAGE PLPGSQL

#14 Re : PL/pgSQL » fonction » 29/04/2014 12:06:57

merci pour ta réponse Geo-x,
je l'ai essayé :

select (465551/1000) ::numeric(7,3);
465.000   et non pas 465.551

#15 PL/pgSQL » fonction » 29/04/2014 06:26:05

tatou
Réponses : 8

Bonjour PLPGSQL pro smile

j'aimerais faire une fonction qui me divise un entier par 1000 ci-dessous le code :

CREATE FUNCTION unite_s ( x integer)
returns numeric(6,3)
AS

$corps$

Begin

return (  x /1000) ;

end;

$corps$

LANGUAGE PLPGSQL

mais lors de l'exécution une erreur s'affiche:
ERREUR:  champ numérique en dehors des limites
DETAIL:  Un champ de précision 6 et d'échelle 3 doit être arrondi à une valeur
absolue inférieure à 10^3.

j'ai essayé avec :  select 465551/1000 ::numeric(7,3);
il me renvoie : 465.5510000000000000 et moi je veux que 465.551 sitou comment faire plz

merci pour ton aide appréciée

#16 Re : PL/pgSQL » procédures stockées , trigger table temporaires » 25/04/2014 16:21:57

merci gleu pour ton aide
tu peux me donner un tutorial comment le faire j'ai cherché sur google mais j'arrive pas à le faire

#17 Re : PL/pgSQL » procédures stockées , trigger table temporaires » 25/04/2014 12:21:41

merci bcp gleu ça marche smile
une autre question si je veux faires des traitements sur les colonnes avant de populer la table public.emp

je définis une fonction exple convert_time()
et dans la fonction trigger je dois l'appeler ?

merci pour ton aide appréciée

#18 Re : PL/pgSQL » procédures stockées , trigger table temporaires » 25/04/2014 10:21:56

Bonjour gleu,

merci pour ta réponse voici l'erreur:

ERREUR:  le contrôle a atteint la fin de la procédure trigger sans RETURN
CONTEXT:  fonction PL/pgsql emp_stamp()

********** Erreur **********

ERREUR: le contrôle a atteint la fin de la procédure trigger sans RETURN
État SQL :2F005
Contexte : fonction PL/pgsql emp_stamp()

#19 PL/pgSQL » procédures stockées , trigger table temporaires » 24/04/2014 19:00:38

tatou
Réponses : 6

Bonjour,

Je dois utiliser les procédures stockées pour effectuer des transformations sur des données des tables temporaires afin de les stocker dans des tables qui seront persisté es par une application web ,
autre chose il me faut que après chaque insertion dans la table temporaire les données doivent suprimées pour laisser de place pour les nouvelles données
Ma question comment je dois le faire via un trigger after event insert et appliquer les changement sur les données via l'appel d'une procédure stockée
j'arrive pas à le faire

comme initiative je fais ça comme code :

REATE TABLE public.emp (
   
    salaire integer,
    date_dermodif timestamp,
    utilisateur_dermodif text
);

CREATE TABLE brut.emp (
   
    salaire integer,
    date_dermodif timestamp,
    utilisateur_dermodif text
);

CREATE FUNCTION emp_stamp() RETURNS trigger AS $emp_stamp$

    BEGIN
   
            INSERT INTO public.emp
 
           SELECT  *  from  brut.emp ;
           
           return NULL;
       
    END;
   
$emp_stamp$ LANGUAGE plpgsql;

CREATE TRIGGER emp_stamp AFTER  INSERT ON brut.emp
    FOR EACH ROW EXECUTE PROCEDURE emp_stamp();
mais il m'affiche un erreur que pas de return sad

merci beaucoup pour votre aide appréciée

Pied de page des forums

Propulsé par FluxBB