From: | pierre crumeyrolle <pierre(dot)crumeyrolle(at)c-s(dot)fr> |
---|---|
To: | Guillaume Lelarge <guillaume(at)lelarge(dot)info> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: [postgrsql bytea ]extraction bytea |
Date: | 2014-04-10 14:59:47 |
Message-ID: | 5346B1E3.3040709@c-s.fr |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
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
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)
From | Date | Subject | |
---|---|---|---|
Next Message | Cédric Villemain | 2014-04-10 17:22:06 | Re: [postgrsql bytea ]extraction bytea |
Previous Message | Guillaume Lelarge | 2014-04-10 14:31:36 | Re: [postgrsql bytea ]extraction bytea |