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 : Optimisation » Maintenance index -> mysql + tokudb » 12/06/2013 11:06:34

Bonjour Kenrio,


Effectivement, le scaling impose des règles de monitoring.


Mais les newsql font merveille dans ce domaine avec l'avènement du cloud database. En quelques clics tout est réglé.


Pour le pl/pgsl et le sql, il ne s'agit en effet plus de poésie mais de faits. Le langage PL/sql développé par Oracle est évolué et permet les caches de query plan complexes plus aisé.

La question du pl/pgsql en revanche est plus élaboré dans la construction de logique directement dans la base de données en instaurant de nouvelles fonctionnalités qui permettent de n'avoir à corriger qu'un seul endroit en cas de changement de logique.


On évite ainsi de recréer la roue en permanence et limitons les scripts externes réduits à leur plus simple expression. Donc évolutifs. Et sans recopie de code ou de logique d'un cluster à l'autre.


L'idée est donc bien ici de prendre avantage du core du moteur et non pas simplement se contenter de contraintes ou de stockage en BDD.

On fait participer la BDD. Et on y implémente évidemment du failover.


On en revient au point que vous venez de soulever : l'entretien "manuel" est, suivant cette logique, moindre.


"Moins de temps à la technique, plus pour faire rentrer du fric". Voilà pour la rime, qui elle rime à quelque chose smile

#2 Re : Optimisation » Maintenance index -> mysql + tokudb » 12/06/2013 07:34:03

Merci beaucoup,


Julien, vous même utilisateur, ce moteur est globalement facile d'entretien ?


Que pensez-vous du langage pl/pgsql ? En terme de performance comparé à du sql ? Et notamment en stratégie de cache pour des procédures stockées et autres triggers éventuels ?

#3 Re : Optimisation » Maintenance index -> mysql + tokudb » 11/06/2013 15:44:57

Merci,


Honnêtement, le fractal tree, je m'en contre-fiche.


Ce que je veux c'est une base de données qui n'a pas besoin de beaucoup d'entretien voire pas du tout, comme c'est le cas avec ce moteur.


J'ai le les index alternatifs. Je ne suis pas sûr du choix à faire. 

Pas mal d'écriture et encore plus de lecture. On commence petit avec des BDD en dizaines de gigas, mais vu le rythme des données qu'on engrange, on arriverait à un tera bientôt que cela ne m'étonnerait même pas.


L'architecture est simple.


Mais si postgresql fait mieux dans la maintenance alors on prendra postgresql. Si les perf sont plus ou moins équivalentes c'est bon. On n'est pas à millième non plus.

Vos expériences ? smile

#4 Re : Optimisation » Maintenance index -> mysql + tokudb » 11/06/2013 13:02:00

Merci je l'avais vu ça.


Donc Postgresql n'utilise rien de plus moderne que le btree.


Les problèmes restent les mêmes qu'avec un mysql par défaut. Moins intéressant.


Les requêtes vont indubitablement perdre en performance au bout d'un moment car ça va beaucoup bouger dans la BDD. Les fenêtres de maintenance, dump et compagnie... non.


Bien, je pense finalement que Postgresql n'est une fois de plus pas le moteur qu'il nous faudra choisir pour ce projet..


Dommage j'aurais aimé pouvoir intégrer ce moteur dont on dit du bien.
S'il y a des techniques particulières, je suis preneur.


Merci beaucoup

#5 Optimisation » Maintenance index -> mysql + tokudb » 10/06/2013 19:21:14

LeHibou
Réponses : 9

Bonjour,

J'utilise actuellement tokudb et satisfait du fait que la réindexation est inutile.

Je compte utiliser postgresql 9.3 d'ici peu pour tester les différents environnements.

Existe-t'il une méthode équivalente sur ce sgbd ?


Egalement, je pense que le crû 9.2-9.3 est d'excellente facture pour envisager les réplications.


Un avis ?

Cordialement,

#6 Général » Postgresql + E-Commerce » 30/03/2011 21:11:58

LeHibou
Réponses : 1

Bonjour à tous,

Je me pose, et donc à vous aussi, une question en deux parties :

1) Je me renseigne pour créer mon site de e-commerce.
Et là, c'est une douce catastrophe. Je me rends compte que beaucoup de sites offrent des solutions pour Mysql. Vous l'aurez compris, j'aime Postgresql et j'y ai passé beaucoup de temps.

Les logiciels en questions sont du style Thélia, Magento... Quels sont les alternatives simples qui puissent prendre en charge ma base postgresql ?


2) Admettons que je sous-traite mon hébergement. Cela implique de mettre ma base en ligne ?

Plus généralement, comment lier la base d'un site internet (sur serveur sous traité) à une base de gestion commerciale reposant sur Postgresql en local (sur ordinateur de l'entreprise) ?


Deux grosses interrogations qui ne trouvent pas de réponse... Je ne vois pas l'intérêt d'avoir deux bases de données pour une même -petite-société.

Merci à vous !

LeHibou

#7 C et C++ » QT et insertion de valeurs Postgres : échec. D'autres possibilités ? » 08/02/2011 15:59:36

LeHibou
Réponses : 1

Bonjour à tous,

J'ai épluché la documentation de Qt mais je ne trouve rien qui réponde à mon interrogation.

Avec Qt Creator, j'ai modélisé mon interface, mais je voudrais un Filemaker-like ou un Openoffice-Base-like en ultra simplifié. Eux, ils ont les champs qu'on peut placer n'importe où et qu'on peut remplir. Pas de tableaux...

Un champ "nom" dans qt, lié à ma BDD zero.un.

Impossible à faire jusqu'à présent..

J'ai besoin de votre aide..

A bientôt,

LeHibou

#8 C et C++ » C++ en interfaçage : retour d'expérience ? » 05/01/2011 11:37:21

LeHibou
Réponses : 2

Bonjour à tous,

J'ai cherché sur google un moyen de faire communiquer Postgresql et le lagage C++.

Ceci m'a conduit sur la libpqxx.

Aujourd'hui, la principale question est la suivante :

Je sors du C pour me mettre au C++. Peut-on faire de belles interfaces avec ce langage ?

Car j'utilisais Base d'Openoffice, mais la gestion des sous-formulaires etc.. n'est pas toujours suivie d'une version à l'autre (ça n'enlève rien à la très bonne qualité générale du soft, que j'utilise, du reste, quotidiennement).

Comment le sentez-vous ? J'ai besoin de retour d'expérience..

Merci à vous,

A bientôt,

LeHibou

#9 Re : Général » sous-formulaires » 02/12/2010 21:39:19

Ok j'ai pu tester, cela fonctionne sous Postgresql mais pas sous openoffice.

Je sens que je vais changer de programme de front...

Merci beaucoup en tout cas d'avoir pris du temps à m'éclairer !

A bientôt !

LeHibou

#10 Re : Général » sous-formulaires » 02/12/2010 18:22:05

Si c'est vous Marc qui me reprenez sur ce point, je sens que je vais passer un sale quart d'heure smile

Je me suis -très- mal exprimé.

Disons plutôt que la vue ne permet pas d'écriture en dur mais bel et bien la représentation d'une écriture déjà existante. Or c'est précisément dès l'amont que je suis bloqué.

Voilà je vais essayer votre méthode Marc et je reviens dire ce qu'il en est après les embouteillages smile

A tout à l'heure

#11 Général » sous-formulaires » 02/12/2010 16:11:30

LeHibou
Réponses : 4

Bonjour à tous,

Cette fois l'occasion me permet de faire plus court !

j'ai un petit pépin : je ne vouis pas comment je pourrais créer un sous formulaire en sql.

----------
Contexte : je tourne avec le driver JDBC sur openoffice Base car les autres ne fonctionnent pas correctement (gestion triggers, positions colonne dans les tables, index out of range, j'en passe et des meilleures).
Lorsque je fais un sous formulaire interne à Base, tout fonctionne. Avec le driver sdbc, idem.

Mais avec le Jdbc, rien. Même avec une base neuve.
----------
par exemple :

Table1
colonneA
colonneB

Table2
colonneC
colonneD


Quel est le code pour que la Table2 devienne un sous-formulaire de la colonne a via la colonne c par exemple ?

select colonneA, colonneC from Table1,Table2 where colonneA=:colonneC ??

Et une vue, c'est dangereux : ça ne reste pas en mémoire...

Je ne trouve pas la solution...

A bientôt !

LeHibou

#12 Re : Général » Trigger anniversaire » 14/11/2010 12:13:08

D'accord,

Avec la fonction de recherche interne à Postgres: il suffit de créer des champs "jour", "mois" et "année" dans la table client pour la date de naissance et de ne faire qu'une recherche sur le(s) mois concerné(s) de cette table. Cela fonctionne impeccablement.

Avec le cron, il faut penser sa stratégie : voir deux mois à l'avance pour les anniversaires est un minimum. On configure donc 6 lignes dans le crontab cherchant chaque fois le mois présent et le mois d'après.

Avec le spreadsheet, et avec l'utilisation en front d'openoffice, il suffit d'extraire la table et de faire un tri sur les résultats. Je n'ai pas essayé le data pilot (je n'aime pas sa logique de configuration).

Voilà pour faire le tour de ma question avec Postgresql 9.x.

A bientôt !

Le Hibou

#13 Re : Général » Trigger anniversaire » 10/11/2010 15:18:54

Ok, je comprends mieux les tenants et les aboutissants.

A moins qu'un script de ce genre fasse l'affaire (supposé "Trust", sinon pgpass)? :

#!bin/bash
psql -U lehibou -h monserveur -d mabase -c "perform client.anniv from test.client if (date_part('month',timestamp 'client.anniv') = date_part('month',timestamp 'current_date) and (date_part('day',timestamp 'client.anniv') = date_part('day',timestamp 'current_date')  and (tg_op = 'INSERT' or tg_op = 'UPDATE') then insert into test.alarme (alarm_anniv) Values ('new.anniv'); end if; return new; end;

exit 0;

Je suis à peu près sûr qu'il y a des erreurs dans ce code. Mais l'idée y est. Tout ceci dans un cron root.

Sinon, comme j'utilise OpenOffice en front, je créé dans Postgres une table Alarme avec ce dont j'ai besoin en champs, et Openoffice qui gère lui même la recherche... à creuser.

Vous avez des lumières là dessus ?

A bientôt,

LeHibou

#14 Re : Général » Trigger anniversaire » 10/11/2010 10:18:22

Ah..
Et comme je ne sais pas si c'est une fonctionnalité qui intéresse grand monde, je pense que je suis "condamné" à faire par spreadsheet (mon niveau pour programmer une telle chose étant bien insuffisant).

Mais au cas où, je peux lancer une demande aux dévelopeurs de Postgres ? Ou cela paraîtra complètement déplacé ?

Merci en tout cas,

A bientôt,

LeHibou

#15 Re : Général » Trigger anniversaire » 10/11/2010 09:34:24

Je pensais que cela sélectionnait la bonne colonne pour l'analyse globale.

Mais la nuit aidant, j'ai l'impression que je serai plus efficace pour gérer cela par une spreadsheat, pour 2 raisons :

- le trigger ne s'enclenche que si on ajoute ou modifie la table.
- si une période creuse s'annonce, le trigger va louper des anniversaires (cas des 367 clients ajoutés tous le premier jour).

Mais d'un autre côté, cela oblige à faire des copier coller quotidien de la table dans un tableur, ce qui n'est pas une solution en soi (limite numerique du tableur) et surtiout absence totale d'automatisation.

Si on n'opère pas par trigger (sauf si pour vous, c'est cohérent), comment aborder ce problème de rappel d'anniversaire ?


Je suis preneur de toute piste,

A bientôt !

Le Hibou

#16 Général » Trigger anniversaire » 09/11/2010 23:56:30

LeHibou
Réponses : 12

Bonjour à tous,

Je souhaite mettre en place un trigger anniversaire, me permettant de n'oublier personne en route.
J'ai également créé une table "alarme" qui recoit ce genre d'infos.

Constat : les années  avancent : il faut donc une base fixe. C'est la raison pour laquelle j'ai pensé à ne retenir que le jour et le mois de l'anniversaire.

Voici ce que j'ai, et qui ne fonctionne pas :

CREATE OR REPLACE FUNCTION mf.verific() RETURNS trigger AS
$BODY$begin
perform client.anniv
from test.client;

if (date_part('month',timestamp 'client.anniv') = date_part('month',timestamp 'current_date) and (date_part('day',timestamp 'client.anniv') = date_part('day',timestamp 'current_date')  and (tg_op = 'INSERT' or tg_op = 'UPDATE')
then insert into test.alarme (alarm_anniv)
Values ('new.anniv');
end if;

return new;
end;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

Mes tables:

-- Table: test.client

-- DROP TABLE test.client;

CREATE TABLE test.client
(
  anniv date NOT NULL,
  CONSTRAINT client_pkey PRIMARY KEY (anniv)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE test.client OWNER TO "me";

-- Trigger: mp on test.client

-- DROP TRIGGER mp ON test.client;

CREATE TRIGGER mp
  BEFORE INSERT OR UPDATE
  ON test.client
  FOR EACH ROW
  EXECUTE PROCEDURE test.verific();
-- Table: test.alarme

-- DROP TABLE test.alarme;

CREATE TABLE test.alarme
(
  alarm_anniv date NOT NULL,
  CONSTRAINT verif_pkey PRIMARY KEY (alarm_anniv)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE test.alarme OWNER TO "me";

Attention, c'est pour le test car ici, il ne renvoit que la valeur de la date d'anniv (inutile si on ne sait pas à qui elle appartient...). Egalement, la clé primaire interdit deux personne d'avoir le même jour d'anniv (débile, mais c'est pour le test).

Si vous avez une idée sur la façon d'aborder le sujet, je suis preneur...

A bientôt,

Le Hibou

#17 Re : Général » Sequence Lettre + chiffres » 08/11/2010 16:35:47

Marc Cousin,

Vous venez de répondre à mon interrogation. Cela fonctionne parfaitement.

Pour les autres que cela intéresserait, on peut s'inspirer du code ci-dessous, pour avoir un trigger activant une séquence de type Lettre+Chiffres (A100, A101...,An), en fonction d'une entrée (ici, acompte) il faut donc faire :

Trigger :

CREATE OR REPLACE FUNCTION "Facturation"."Trigg_valeur"() RETURNS trigger AS
$BODY$begin
perform "Execution"
From "Facturation"."Execution";

if ((new."Type" = 'Devis') and (tg_op = 'INSERT'))
then new."Num_" = nextval('"Facturation"."Seq_id_Devis"'::regclass); 

elsif ((new."Type" = 'Acompte') and (tg_op = 'INSERT'))
then new."Num_" = 'A'||nextval('"Facturation"."Seq_id_Acompte"'::regclass);

end if;

return new;

end;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

et la séquence :

SELECT setval('"Facturation"."Seq_id_Acompte"', 100, true);

Je vous remercie de votre réactivité et de l'efficacité de votre compétence,

A bientôt,

Le Hibou

#18 Général » Sequence Lettre + chiffres » 08/11/2010 14:13:52

LeHibou
Réponses : 2

Bonjour à tous,

Cela faisait longtemps mais je reviens sur le "faux rhum" afin d'éclaircir un point.

Comment avoir une séquence du type A101, A102,...,An ?

Tout d'abord, je tiens à signaler que tout le reste de a base semble bien aller (je l'ai améliorée depuis) mais voici le trigger dont je dispose :

CREATE OR REPLACE FUNCTION "Facturation"."Trigg_valeur"() RETURNS trigger AS
$BODY$begin
perform "Execution"
From "Facturation"."Execution";

if ((new."Type" = 'Devis') and (tg_op = 'INSERT'))
then new."Num_" = nextval('"Facturation"."Seq_id_Devis"'::regclass); 

elsif ((new."Type" = 'Facture') and (tg_op = 'INSERT'))
then new."Num_" = nextval('"Facturation"."Seq_id_Facture"'::regclass);

elsif ((new."Type" = 'Acompte') and (tg_op = 'INSERT'))
then new."Num_" = nextval('"Facturation"."Seq_id_Acompte"'::regclass);

end if;

return new;

end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

et voici une de mes séquences de test :

SELECT setval('"Facturation"."Seq_id_Acompte"', 100, true);

J'ai tenté -bien- des choses (mettre  dans le trigger : 'A'nextval..., 'A'+nextval... ) mais j'obtiens toujours une erreur (qui a dit "évidemment" ?).

Voyez-vous comment je pourrais avoir un code du type A101, A102,...,An svp ?

J'attends vos réponses,

A bientôt,

Le Hibou

#19 Re : Général » Trigger qui récupère les valeurs induites » 24/06/2010 10:53:49

Ok... ça marche.

Mots-clé: trigger, valeurs, agir, conditions,
Je résume pour les autres (gain de temps notable pour tous et évitement des doublons ultérieurs):

Trigger sur lequel on fait une sélection d'une valeur induite par celle d'un autre: voir #5, le code est complet. Reste à l'adapter à votre cas.

Le trigger ci dessous permet de vérifier un/des champs et lance le trigger si ils sont vérifiés. Le voici en entier:

Declare
id integer;

Begin
select into id "Id_Matiere"
from "Facturation"."Nom_Prod_Fini"
where "Nom_Produit" = new."Nom_Produit_Fini";


	If ((NEW."Type_facture" = 'Facture' OR NEW."Type_facture" = 'Acompte') AND TG_OP = 'INSERT') 
		Then insert into stocks."Matiere" ("Id_Matière","Quantite_commande_(kg)","Quantite_casse_(kg)","Quantite_Sortie_(kg)")
		Values (id,0,0,new."Quantite"); -- ici, ne vous fiez pas à ce qu'il y a entre parenthèses. Adaptez-le selon l'ordre des champs de votre table et ce que vous voulez faire--
		Return new;

	end if;
	return new;

	
End;

Voilà bonne journée à tous, et encore une fois, merci à vous gleu,

A bientôt,

LeHibou

#20 Re : Général » Trigger qui récupère les valeurs induites » 24/06/2010 08:36:13

Bonjour,

J'ai tenté une nouvelle chose: faire en sorte que le trigger se déclenche si une valeur est sélectionnée dans "Calculs"."Type_facture": j'ai donc edité la ligne du If mais j'ai un message d'erreur:

If ("Type_facture" = 'Facture' or "Type_facture" = 'Acompte', TG_OP = 'INSERT')

qui donne:
ERROR:  column "Type_facture" does not exist

Si j'ajoute le "Calculs". devant, il me dit qu'il manque une clause "FROM".
Je me suis pourtant renseigné sur les conditions de type IF(expr1,expre2,expre3). Même en supprimant le OR, je n'ai rien de bon...

Pourquoi? je pose pourtant bien les bases de la condition non?

A bientôt,

LeHibou

#21 Re : Général » Trigger qui récupère les valeurs induites » 23/06/2010 22:35:02

J'entends bien gleu,

Je perçois que mon "Merci à vous gleu." pouvait être mal interprété et c'est ma faute.
Il aurait été plus judicieux d'écrire : "ne vous en faites pas, c'est bon, j'avais mal écrit le code. Mais j'ai trouvé à présent."

En tout cas, je vous remercie puisque vous m'avez mis sur la voie avec la fonction.

A bientôt!

#22 Re : Général » Trigger qui récupère les valeurs induites » 23/06/2010 20:09:34

C'est bon, cela fonctionne. Je laisse à tous le trigger qui renvoit le résultat dans une colonne. Cela peut servir à d'autres.

Voici donc la solution pour que cela marche:

Declare
Id integer;

Begin
select into id "Id_Matiere"
from "Facturation"."Nom_Prod_Fini"
where "Nom_Prod_Fini"."Nom_Produit"= new."Nom_Produit_Fini";

    If (TG_OP = 'INSERT')
        Then insert into stocks."Matiere" ("Id_Matière","Quantite_commande_(kg)","Quantite_casse_(kg)","Quantite_Sortie_(kg)")
        Values (id,0,0,-(new."Quantite"));
        Return new;

    end if;
    return new;

    
End;

Merci à vous gleu.

#23 Re : Général » Trigger qui récupère les valeurs induites » 23/06/2010 19:36:05

Mon égalité avec le where ne donne rien; Ce qu'il faut pourtant, c'est que la requête s'effectue sur le produit sélectionné dans la table "Calculs".

Voici mon trigger réécrit:

Declare
Id integer;

Begin
select into id "Id_Matiere"
from "Facturation"."Nom_Prod_Fini"
where "Nom_Prod_Fini"."Nom_Produit"="Nom_Produit_Fini";

	If (TG_OP = 'INSERT')
		Then insert into stocks."Matiere" ("Id_Matière","Quantite_commande_(kg)","Quantite_casse_(kg)","Quantite_Sortie_(kg)")
		Values (id,0,0,-(new."Quantite"));
		Return new;

	end if;
	return new;

	
End;

je mets également les extraits de tables concernées (sans contraintes, etc...):

Table Calculs:

CREATE TABLE "Facturation"."Calculs"
(
  "Prix_HT" numeric NOT NULL,
  "Remise(%)" numeric,
  "Quantite" numeric,
  "Prix_Net_HT" numeric(30,2),
  "Nom_Produit_Fini" character varying NOT NULL,
  "Tva-type" integer,
  "Valeur_Tva" numeric NOT NULL,
  "Montant_tva" numeric(30,2),
  "Num_Id" integer,
  "Montant_Ligne" numeric(30,2),
  "Num_Ope" integer NOT NULL DEFAULT nextval('"Facturation"."Num_ope_seq"'::regclass),
  "Type_facture" character varying,

Nom_Produit_Fini est lié à cette table:

CREATE TABLE "Facturation"."Nom_Prod_Fini"
(
  "Nom_Produit" character varying NOT NULL,
  "Id_Matiere" integer,
  "Id_Pot" integer,

et la table de stock est la suivante:

CREATE TABLE stocks."Matiere"
(
  "Id_Matière" integer NOT NULL,
  "Quantite_commande_(kg)" numeric,
  "Quantite_casse_(kg)" numeric,
  "Quantite_Sortie_(kg)" numeric,
  "Quantite_finale_(kg)" numeric,
  "Date" timestamp with time zone,

Le message d'erreur est le suivant:

ERROR:  missing FROM-clause entry for table "Calculs"
LINE 1: ...turation"."Nom_Prod_Fini" where "Nom_Prod_Fini" = "Calculs"....

#24 Re : Général » Trigger qui récupère les valeurs induites » 23/06/2010 19:13:30

Bonsoir gleu,

Plus précisément, j'ai une table "Calculs".

J'entre toutes les informations, dont le nom du produit. Ce nom de produit contient un id matière et un id pot. Ces deux dernières info figurent sur une autre table.

Il y a donc trois tables qui entrent en interaction.

Ce que je souhaite, c'est que quand je valide ma table "Calculs", il mette à jour une autre colonne d'une autre table. Cette autre table n'est autre que ma table de stocks.
Ainsi, pour un produit donné dans calcul, les composants vont mettre à jour les tables matiere et pot.

Et je bloque lamentablement dessus.

Je vais essayer votre code,

A tout à l'heure,

LeHibou

PS: au temps pour moi. dans

WHERE "Nom_Prod_Fini"."Nom_Produit" = "Nom_Produit"

il faut en fait lire

WHERE "Nom_Prod_Fini"."Nom_Produit" = "Nom_Produit_Fini"

Cette valeur est différente. Sinon effectivement, aucun intérêt à faire une égalité.

A tout à l'heure

#25 Général » Trigger qui récupère les valeurs induites » 23/06/2010 18:06:41

LeHibou
Réponses : 10

Bonjour à tous,

J'en vois déjà certains grogner de mon retour.

Tout d'abord, voilà où j'en suis:
BDD 20 tables, impressions pour factures gérées avec Calc.

Mais il y a encore une dernière chose qui me dérange.
Est-il possible à mon trigger de renvoyer le résultat de la requête que j'ai écrite dans une colonne bien précise?

Je viens de rééditer le message pour la seconde fois. j'ai supprimé les tables qui ne servaient pas à la compréhension du problème.

Dans mon  trigger, si je supprime la requête et remplace "Id_Matière" dans "Values ("Id_Matiere"..."par un Id existant, alors ça marche. mais je veux qu'il fasse une requête.
La requête, une fois faite, me donne les informations dont j'ai besoin.

ce que j'aimerais, c'est que mon trigger insère dans stocks."Matiere"."Id_Matiere" le résultat de la requête qu'il contient (select... from...)
Lui même est situé dans Facturation. Donc un autre schéma. Ce trigger envoie donc à une table étrangère les valeurs de la table locale ET le résultat d'une requête qui se fait sur une table voisine.


J'ai créé le trigger suivant:

CREATE OR REPLACE FUNCTION "Facturation"."MAJ_Quantite_Matiere"()
  RETURNS trigger AS
$BODY$Begin
SELECT 
"Id_Matiere"
FROM 
  "Facturation"."Nom_Prod_Fini"
WHERE 
  "Nom_Prod_Fini"."Nom_Produit" = "Nom_Produit";

	If (TG_OP = 'INSERT')
		Then Insert into stocks."Matiere" ("Id_Matière","Quantite_commande_(kg)","Quantite_casse_(kg)","Quantite_Sortie_(kg)")
		Values ("Id_Matiere", 0,0,-(new."Quantite"));
		Return new;

	end if;
	return new;

	
End;$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;
ALTER FUNCTION "Facturation"."MAJ_Quantite_Matiere"() OWNER TO postgres;

Ce n'est pas simple à expliquer.
Mais je serais ravi de m'exprimer à nouveau sur les points qu'il faudra.

Merci

Pied de page des forums

Propulsé par FluxBB