From: | CRUMEYROLLE Pierre <pierre(dot)crumeyrolle(at)c-s(dot)fr> |
---|---|
To: | cedric(at)2ndquadrant(dot)com |
Cc: | pgsql-fr-generale(at)postgresql(dot)org, Guillaume Lelarge <guillaume(at)lelarge(dot)info> |
Subject: | Re: [postgrsql bytea ]extraction bytea |
Date: | 2014-04-10 18:10:09 |
Message-ID: | 20140410201009.115339gb610j96yp@messagerie.si.c-s.fr |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
OK merci pour ces précisions
Cédric Villemain <cedric(at)2ndquadrant(dot)com> a écrit :
> Le jeudi 10 avril 2014 16:59:47 pierre crumeyrolle a écrit :
>> j'extrait mon binaire via ECPG => select binaire from ma table
>> il va dans un buffer déclaré char * buffer
>> je fwrite mon buffer
>> je me retrouve avec un fichier ascii
>> le select sous pg_admin me donne \037\235\220C\324\200 etc ...
>> je m'attendais à voir du binaire
>
> non, postgresql fait une sortie texte en hexa ou en escape pour le
> bytea. Il faut a ce moment là retraiter cette entrée pour l'écrire dans
> le format binaire souhaité.
>
> Sinon vous devez ajouter une fonction pour renvoyer directement au
> format binaire à la place de byteasend(bytea), je suggère de regarder
> "src/backend/utils/adt/varlena.c" et "src/include/utils/bytea.h"
>
>
>>
>> Le 10/04/2014 16:31, Guillaume Lelarge a écrit :
>> > On Thu, 2014-04-10 at 16:15 +0200, pierre crumeyrolle wrote:
>> >> OK mais ma data c'est pas de l'ascii mais du binaire, c'est du tar
>> >> compressé stocké en base (initialement dans des CLOB oracle migré
>> >> via
>> >> ora2pg)
>> >
>> > Je ne comprends pas. L'exemple de Dimitri traite bien d'un objet
>> > binaire (très précisément une donnée dans une colonne bytea). Le
>> > fait qu'il est mis un texte dans cette colonne ne change pas que la
>> > colonne est du binaire.
>> >
>> >> Le 10/04/2014 15:44, Dimitri Fontaine a écrit :
>> >>> pierre crumeyrolle <pierre(dot)crumeyrolle(at)c-s(dot)fr> writes:
>> >>>> comment puis je extraire le contenu de la colonne bindata de type
>> >>>> bytea directement dans un fichier binaire sans passer par un
>> >>>> copy qui rajoute une entête ?
>> >>>
>> >>> Il me semble qu'il faut écrire une application cliente pour cela.
>> >>>
>> >>> Voilà comment reproduire le problème :
>> >>> ~# create table t(id integer, bindata bytea);
>> >>> CREATE TABLE
>> >>> ~# insert into t values(1, 'deadbeef');
>> >>> INSERT 0 1
>> >>> ~# table t;
>> >>>
>> >>> id | bindata
>> >>>
>> >>> ----+--------------------
>> >>>
>> >>> 1 | \x6465616462656566
>> >>>
>> >>> (1 row)
>> >>>
>> >>> ~# \copy (select bindata from t where id = 1) to '/tmp/bin'
>> >>> binary
>> >>> COPY 1
>> >>>
>> >>> ~# \! hexdump -C /tmp/bin
>> >>> 00000000 50 47 43 4f 50 59 0a ff 0d 0a 00 00 00 00 00 00
>> >>> |PGCOPY..........| 00000010 00 00 00 00 01 00 00 00 08 64
>> >>> 65 61 64 62 65 65 |.........deadbee| 00000020 66 ff ff
>> >>> |f..| 00000023
>> >>>
>> >>> Écris une application dans ton language de programmation préféré
>> >>> afin de pouvoir écrire chaque valeur binaire dans un fichier
>> >>> séparé.>>>
>> >>> Par exemple, avec mes outils préférés du moment :
>> >>> CL-USER> (with-open-file (s "/tmp/bin"
>> >>>
>> >>> :direction :output
>> >>> :element-type '(unsigned-byte 8)
>> >>> :if-exists :supersede)
>> >>>
>> >>> (pomo:with-connection '("dim" "dim" "dim" :unix
>> >>> :port 54393)
>> >>>
>> >>> (write-sequence
>> >>>
>> >>> (pomo:query "select bindata from t where id = 1"
>> >>> :single) s)))
>> >>>
>> >>> #(100 101 97 100 98 101 101 102)
>> >>>
>> >>> $ hexdump -C /tmp/bin
>> >>> 00000000 64 65 61 64 62 65 65 66
>> >>> |deadbeef| 00000008
>> >>>
>> >>> Et voilà,
>> >>
>> >> --
>> >> Envoi via la liste pgsql-fr-generale
>> >> (pgsql-fr-generale(at)postgresql(dot)org)
>> --
>> Envoi via la liste pgsql-fr-generale
>> (pgsql-fr-generale(at)postgresql(dot)org)
>
> --
> Cédric Villemain +33 (0)6 20 30 22 52
> http://2ndQuadrant.fr/
> PostgreSQL: Support 24x7 - Développement, Expertise et Formation
----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.
--
Envoi via la liste pgsql-fr-generale (pgsql-fr-generale(at)postgresql(dot)org)
From | Date | Subject | |
---|---|---|---|
Next Message | Pierre BOIZOT | 2014-04-22 07:02:30 | Re: Offre d'emploi : Consultant DB opensource ( pg / nosql) |
Previous Message | Cédric Villemain | 2014-04-10 17:22:06 | Re: [postgrsql bytea ]extraction bytea |