Skip site navigation (1) Skip section navigation (2)

Re: Duplication des données insérées dans un fichier

From: Guillaume Lelarge <guillaume(at)lelarge(dot)info>
To: Marc Cousin <cousinmarc(at)gmail(dot)com>
Cc: pgsql-fr-generale(at)postgresql(dot)org, Sébastien Dinot <sebastien(dot)dinot(at)free(dot)fr>
Subject: Re: Duplication des données insérées dans un fichier
Date: 2008-11-11 20:05:14
Message-ID: 4919E57A.9000303@lelarge.info (view raw or flat)
Thread:
Lists: pgsql-fr-generale
Marc Cousin a écrit :
> Pour s'en sortir avec le copy, il faut le mettre dans un execute (testé à 
> l'instant sur une 8.3) ...
> 
> 
> CREATE OR REPLACE FUNCTION copy_on_fly () RETURNS trigger AS $copy_on_fly$
>   DECLARE
>     csv_file VARCHAR(100);
>     nb       INT;
>   BEGIN
>     csv_file := '/tmp/data_' || NEW.id || '.csv';
>     -- Trace pour demo
>     RAISE NOTICE 'csv_file = %', csv_file;
>     -- Code ne servant qu'a verifier l'interpretation correcte de NEW.id
>     nb = ( SELECT COUNT( p.* ) FROM person AS p WHERE p.id <> NEW.id );
>     -- Trace pour demo
>     RAISE NOTICE 'nb = %', nb;
>     EXECUTE 'COPY ( SELECT p.* FROM person AS p WHERE p.id = ' || 
> NEW.id || ' )
>       TO ''' || csv_file || '''
>       WITH DELIMITER AS ''|''' ;
>     RETURN NEW;
>   END;
> $copy_on_fly$ LANGUAGE 'plpgsql';
> 
> Evidemment, avec les escapes des simple quotes, ca manque d'élégance, mais ca 
> marche ...
> 

Pour le coup des simples quotes, je pense que tu parles de l'instruction
EXECUTE. Il t'est toujours possible de remplacer cette ligne par celle-ci :

EXECUTE $sql$COPY ( SELECT p.* FROM person AS p WHERE p.id = $sql$ ||
NEW.id || $sql$ ) TO '$sql$ || csv_file || $sql$' WITH DELIMITER AS '|'
$sql$

De là à dire que c'est plus lisible :)


-- 
Guillaume.
 http://www.postgresqlfr.org
 http://dalibo.com

In response to

pgsql-fr-generale by date

Next:From: Mathieu ArnoldDate: 2008-11-11 20:54:05
Subject: Re: Un enregistrement au hasard ?
Previous:From: Guillaume LelargeDate: 2008-11-11 19:58:26
Subject: Re: PGXMl?

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group