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
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? |