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).

#201 Re : Général » petit script pour ma SVG » 15/01/2010 11:06:14

ok merci une petite question
a la place je mets $R pour parametrer les schemas ?
for s in `echo $r | /usr/local/pgsql/bin/pg_dump bd -Ft -x -O -n $r  -U user    > /home/moi/$r.tar


merci
#!/bin/sh
r='select nspname from pg_namespace where nspname ;
for s in `echo $r | /usr/local/pgsql/bin/pg_dump bd -Ft -x -O -n $r  -U user    > /home/moi/$r.tar
`
do echo $s;
done;

#202 Re : Général » petit script pour ma SVG » 14/01/2010 17:35:41

j'ai fait le script mis dans .sh il me sort    echo $r|psql --tuples-only   ???
merci

#203 Général » petit script pour ma SVG » 14/01/2010 10:11:16

mich30
Réponses : 17

bonjour je cherche un petit script
en .sh qui parcours tous les schema d'une base de donnée

et qui lance  /usr/local/pgsql/bin/pg_dump bd -Fc -x -O -t schemax.* -U mich >  /home/mich/schemax.gz
comment fait t'on
merci

#204 Re : Général » [RÉSOLU] attente de tache » 11/01/2010 16:26:57

les schemas ne dependent pas des uns et des autres
ok pour cela /usr/local/pgsql/bin/pg_dump bd -Fc -x -O -t schema2.* -U mich >  /home/mich/schema2.gz

merci

#205 Re : Général » [RÉSOLU] attente de tache » 07/01/2010 19:20:37

/usr/local/pgsql/bin/pg_dump bd -Fc -x -O -t schema2.* -U mich >  /home/mich/schema2.tar.gz

comme ca ?
merci de confirmer
@+

#207 Général » [RÉSOLU] attente de tache » 07/01/2010 18:27:57

mich30
Réponses : 6

tache1
/usr/local/pgsql/bin/pg_dump bd -Ft -x -O -t schema1.* -U mich  >  /home/mich/schema1.tar
gzip schema1.tar schema1.tar.gz

tache2
/usr/local/pgsql/bin/pg_dump bd -Ft -x -O -t schema2.* -U mich >  /home/mich/schema2.tar
gzip schema1.tar schema2.tar.gz

tache3
/usr/local/pgsql/bin/pg_dump bd -Ft -x -O -t schema3.* -U mich  >  /home/mich/schema3.tar
gzip schema1.tar schema3.tar.gz


je voudrez creer un script shell ou une autre facon peut etre
quand la tache 1 est fini on accede a la tache2
quand la tache 2 est fini on accede a la tache3

y 'a t'il une methode
merci encore

#209 Re : Général » format pg_dump.exe avec gzip » 07/01/2010 16:02:12

peut tu me confirmer
dump linux qui se faisait en local sur le serveur
/usr/local/pgsql/bin/pg_dump bd -Ft -x -O -t cad.* -U mich
qui marche trés bien

je l'ai retranscris en windows au format custom (gzip) que l'on m'a demandé et de ma machine
j'ai rajouté -x -O comme en dessus

pg_dump.exe --host xx.xx.xx.xx --port 5432 --username mich  --format custom --verbose  --file "cad_svg" -x -O --schema \"cad\" bd
pause ""

demande confirmation
ca a l'air correct ??
car aprés  mon collegue va prendre mon dump windows et faire la restauration sous linux
avec la commande

pg_restore -v -U postgres -d bd  /Users/g/cad_svg  (format gzip)
merci

#210 Re : Général » format pg_dump.exe avec gzip » 07/01/2010 14:56:33

pgdump sous windows OK
et sous linux avec le pg_restore je ne vais pas avoir d'erreur ?
merci

#212 Général » format pg_dump.exe avec gzip » 07/01/2010 14:23:46

mich30
Réponses : 6

pg_dump.exe --host xx.xx.xx.xx --port 5432 --username hubert  --format custom --verbose --file "zen_svg" --schema \"zen\" base

comment puis je avoir le format gzip de sortie 
genre
pg_dump.exe --host xx.xx.xx.xx --port 5432 --username hubert  --format gzip --verbose --file "zen_svg.gz" --schema \"zen\" base

merci

#213 Re : Général » trigger » 04/01/2010 18:25:46

je l'ai  sur la 8.2
SELECT current_query  from pg_stat_activity;
mais comment je gere le  (pg_backend_pid());
merci

#214 Re : Général » trigger » 04/01/2010 18:20:56

pour la 8.4 ca marche
Code:
CREATE OR REPLACE FUNCTION fonction_test()
  RETURNS text AS
$BODY$DECLARE
pa text;
BEGIN
SELECT current_query INTO pa from pg_stat_get_activity(pg_backend_pid());
RETURN pa;
END$BODY$
  LANGUAGE 'plpgsql' VOLATILE;

mais sur la 8.2 cette fonction ne marche pas

ERROR:  function pg_stat_get_activity(integer) does not exist
LINE 1: SELECT current_query  from pg_stat_get_activity(pg_backend_pid(...

j'ai pg_stat_activity mais pas le champ current query ? comme faire merci

#215 Re : Général » trigger » 04/01/2010 17:10:40

oui ca n'a pas d'importance ,
je viens de faire les tests c'est OK
je te remercie beaucoup
ce forum est super !!
A bientot pour de nouvelles avntures postgres
Mich

#216 Re : Général » trigger » 04/01/2010 17:03:07

Guillaume,
ok merci ca m'embete un peu j'aurez aimé qui il y 'ai un update
si tu as 1000 enregistrements , et que je demande un update sur ces lignes
il va me mettre 1000 ligne updates alors que 1 update aurez suffit
FOR EACH STATEMENT  serez pas mieux ?
merci

#217 Re : Général » trigger » 04/01/2010 16:51:47

fait encore un insert puis un update tu verras il ya a 2 updates a la suite
merci

#218 Re : Général » trigger » 04/01/2010 16:40:17

zut !!! je reteste pas possible !!!

#219 Re : Général » trigger » 04/01/2010 16:08:02

non non il y avez juste un insert

#220 Re : Général » trigger » 04/01/2010 15:34:14

c'est bizarre je fais un insert dans emp  je fais un update dans emp
dans la table audit j'ai un insert puis 2 lignes updates !!!

#221 Re : Général » trigger » 04/01/2010 15:14:39

c'est ok
lorsque j'insere il y a un enregistrements dans la table audit ok
et lorsque je fait un update il y a 2 enregistrements update dans la table audit
c'est pas FOR EACH ROW du trigger ?
merci



CREATE OR REPLACE FUNCTION FCT_RECUP_REQUETE()
  RETURNS text AS
$BODY$DECLARE
pa text;
BEGIN
SELECT current_query into pa from pg_stat_get_activity(pg_backend_pid());
RETURN pa;
END$BODY$
  LANGUAGE 'plpgsql' VOLATILE;


CREATE OR REPLACE FUNCTION FCT_RECUP_CLIENT_ADDR()
  RETURNS text AS
$BODY$DECLARE
pa text;
BEGIN
SELECT client_addr from into pa pg_stat_get_activity(pg_backend_pid());
RETURN pa;
END$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
   



/* test
insert into emp values ('mich',12);
update emp set libelle= 15;
select * from emp;



CREATE TABLE emp(
    id                    text,
    libelle          integer
);

CREATE TABLE audit(
    typ_operation         char(1)   NOT NULL,
    Date_Systeme          timestamp NOT NULL,
    id_utilisateur          text      NOT NULL,
    Nom_table              text,
    requete           text,
    client_addr          text
);
       
CREATE OR REPLACE FUNCTION fct_audit() RETURNS TRIGGER AS $audit$
BEGIN
    --
    -- Ajoute une ligne dans emp_audit pour refléter l'opération réalisée
    -- sur emp,
    -- utilise la variable spéciale TG_OP pour cette opération.
    --
    IF (TG_OP = 'DELETE') THEN
        INSERT INTO audit SELECT 'D', now(), user,TG_RELNAME,FCT_RECUP_REQUETE(),FCT_RECUP_CLIENT_ADDR();
        RETURN OLD;
    ELSIF (TG_OP = 'UPDATE') THEN
        INSERT INTO audit SELECT 'U', now(), user,TG_RELNAME,FCT_RECUP_REQUETE(),FCT_RECUP_CLIENT_ADDR();
        RETURN NEW;
    ELSIF (TG_OP = 'INSERT') THEN
        INSERT INTO audit SELECT 'I', now(), user,TG_RELNAME,FCT_RECUP_REQUETE(),FCT_RECUP_CLIENT_ADDR();
        RETURN NEW;
    END IF;
    RETURN NULL; -- le résultat est ignoré car il s'agit d'un trigger AFTER
END;
$audit$ language plpgsql;
       
    CREATE TRIGGER trg_audit
    AFTER INSERT OR UPDATE OR DELETE ON emp
    FOR EACH ROW EXECUTE PROCEDURE fct_audit();

#222 Re : Général » trigger » 04/01/2010 12:37:21

merci marc encore super
pour le trigger genre drop table create table create role le gere t'il
ou comment faut t'il contourner
merci

#223 Re : Général » trigger » 04/01/2010 12:27:03

ok les posts sont arrivés avant mon dernier message j'y reflechis
la methode de marc je vais la tester
et wilka merci j'y reflechis

#224 Re : Général » trigger » 04/01/2010 12:25:05

je vais mieux formuler ma demande ce n'est pas clair
est ce possible de concatener tous les paramétres OLD.*,new.*  lors d'un insert ou update ou delete
et de les mettre dans un champ de type text  tous_parametre dans la table emp_audit ?
OLD.* et NEW.* sont des record donc surement je peux patiner ce record pour recuperer
tous les enregistrements :
exemple si je fais insert into emp values ('hubert',12);
dans  tous_parametre =' hubert,12'
Merci



    CREATE TABLE emp (
    nom_employe       text NOT NULL,
    salaire           integer
);


       drop TABLE emp_audit;
       
CREATE TABLE emp_audit(
    operation         char(1)   NOT NULL,
    tampon            timestamp NOT NULL,
    id_utilisateur    text      NOT NULL,
    nom_employe       text      NOT NULL,
    salaire           integer,
    NOM_TABLE          text,
    tous_parametre           TEXT,
);
       
CREATE OR REPLACE FUNCTION audit_employe() RETURNS TRIGGER AS $emp_audit$
BEGIN
    --
    -- Ajoute une ligne dans emp_audit pour refléter l'opération réalisée
    -- sur emp,
    -- utilise la variable spéciale TG_OP pour cette opération.
    --
    IF (TG_OP = 'DELETE') THEN
        INSERT INTO emp_audit SELECT 'D', now(), user, OLD.*,TG_RELNAME;
        RETURN OLD;
    ELSIF (TG_OP = 'UPDATE') THEN
        INSERT INTO emp_audit SELECT 'U', now(), user, NEW.*,TG_RELNAME;
        RETURN NEW;
    ELSIF (TG_OP = 'INSERT') THEN
        INSERT INTO emp_audit SELECT 'I', now(), user, NEW.*,TG_RELNAME;
        RETURN NEW;
    END IF;
    RETURN NULL; -- le résultat est ignoré car il s'agit d'un trigger AFTER
END;
$emp_audit$ language plpgsql;
       
CREATE TRIGGER emp_audit
    AFTER INSERT OR UPDATE OR DELETE ON emp
    FOR EACH ROW EXECUTE PROCEDURE audit_employe();

drop  TRIGGER emp_audit on emp;

#225 Général » trigger » 04/01/2010 11:54:09

mich30
Réponses : 24

Bonjour
1) 1ere question

J'aimerez dans la table emp_audit creer un champ  marequete de type text
et lorsque j'insere un enregistrement exemple insert into values emp ('hubert',12)
dans ma table emp_audit j'ai
operation         I ok
    tampon         heure courante  ok
    id_utilisateur    postgres ok
    nom_employe       hubert ok,
    salaire           12
    marequete ici "insert into values emp ('hubert',12)"  possible ?

Merci et bonne année a tous




    CREATE TABLE emp (
    nom_employe       text NOT NULL,
    salaire           integer
);

       
CREATE TABLE emp_audit(
    operation         char(1)   NOT NULL,
    tampon            timestamp NOT NULL,
    id_utilisateur    text      NOT NULL,
    nom_employe       text      NOT NULL,
    salaire           integer,
   marequete text

);
       
CREATE OR REPLACE FUNCTION audit_employe() RETURNS TRIGGER AS $emp_audit$
BEGIN
    --
    -- Ajoute une ligne dans emp_audit pour refléter l'opération réalisée
    -- sur emp,
    -- utilise la variable spéciale TG_OP pour cette opération.
    --
    IF (TG_OP = 'DELETE') THEN
        INSERT INTO emp_audit SELECT 'D', now(), user, OLD.*;
        RETURN OLD;
    ELSIF (TG_OP = 'UPDATE') THEN
        INSERT INTO emp_audit SELECT 'U', now(), user, NEW.*;
        RETURN NEW;
    ELSIF (TG_OP = 'INSERT') THEN
        INSERT INTO emp_audit SELECT 'I', now(), user, NEW.*;
        RETURN NEW;
    END IF;
    RETURN NULL; -- le résultat est ignoré car il s'agit d'un trigger AFTER
END;
$emp_audit$ language plpgsql;
       
CREATE TRIGGER emp_audit
    AFTER INSERT OR UPDATE OR DELETE ON emp
    FOR EACH ROW EXECUTE PROCEDURE audit_employe();

Pied de page des forums

Propulsé par FluxBB