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
Views: Raw Message | Whole Thread | Download mbox | Resend email
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

Browse pgsql-fr-generale by date

  From Date Subject
Next Message Mathieu Arnold 2008-11-11 20:54:05 Re: Un enregistrement au hasard ?
Previous Message Guillaume Lelarge 2008-11-11 19:58:26 Re: PGXMl?