Thread: convert int to bytea
Hi all, I'm trying to write a trigger that converts integer to bytea. My schema is like this: Create table xx ( id int, .... ... data bytea); the first 3 bytes of data are the binary representation of id (id is extracted from data by the application) I can occur that id change in that case data has to change too! select 124::bytea doesn't work Is there an other way? (preferabily simple :) Regards -- Olivier PRENANT Tel: +33-5-61-50-97-00 (Work) 15, Chemin des Monges +33-5-61-50-97-01 (Fax) 31190 AUTERIVE +33-6-07-63-80-64 (GSM) FRANCE Email: ohp@pyrenet.fr ------------------------------------------------------------------------------ Make your life a dream, make your dream a reality. (St Exupery)
<ohp@pyrenet.fr> writes: > select 124::bytea doesn't work > > Is there an other way? (preferabily simple :) This kind of question would be more appropriate on pgsql-general. What do you want the resulting bytea to look like? -- Gregory Stark EnterpriseDB http://www.enterprisedb.com Get trained by Bruce Momjian - ask me about EnterpriseDB'sPostgreSQL training!
Hi Gregory On Thu, 29 Nov 2007, Gregory Stark wrote: > Date: Thu, 29 Nov 2007 14:34:57 +0000 > From: Gregory Stark <stark@enterprisedb.com> > To: ohp@pyrenet.fr > Cc: pgsql-hackers list <pgsql-hackers@postgresql.org> > Subject: Re: convert int to bytea > > <ohp@pyrenet.fr> writes: > > > select 124::bytea doesn't work > > > > Is there an other way? (preferabily simple :) > > This kind of question would be more appropriate on pgsql-general. > I know, I should subscribe :) > What do you want the resulting bytea to look like? > example : id = 9 , bytea = '\000\000\011' IIRC > -- Olivier PRENANT Tel: +33-5-61-50-97-00 (Work) 15, Chemin des Monges +33-5-61-50-97-01 (Fax) 31190 AUTERIVE +33-6-07-63-80-64 (GSM) FRANCE Email: ohp@pyrenet.fr ------------------------------------------------------------------------------ Make your life a dream, make your dream a reality. (St Exupery)
On 11/29/07, ohp@pyrenet.fr <ohp@pyrenet.fr> wrote: > On Thu, 29 Nov 2007, Gregory Stark wrote: > > > What do you want the resulting bytea to look like? > > > example : id = 9 , bytea = '\000\000\011' IIRC What do you expect to happen when server and client are differently-endian? -Doug
Does it matter if you have written an explicit cast for int to bytea?<br /><br /><div class="gmail_quote">On Nov 29, 20079:00 PM, Douglas McNaught <<a href="mailto:doug@mcnaught.org">doug@mcnaught.org</a>> wrote:<br /><blockquote class="gmail_quote"style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><divclass="Ih2E3d">On 11/29/07, <a href="mailto:ohp@pyrenet.fr">ohp@pyrenet.fr</a> <<a href="mailto:ohp@pyrenet.fr">ohp@pyrenet.fr</a>>wrote:<br /><br />> On Thu, 29 Nov 2007, Gregory Stark wrote:<br />><br/></div><div class="Ih2E3d">> > What do you want the resulting bytea to look like?<br />> ><br />>example : id = 9 , bytea = '\000\000\011' IIRC<br /><br /></div>What do you expect to happen when server and clientare differently-endian? <br /><br />-Doug<br /><br />---------------------------(end of broadcast)---------------------------<br/>TIP 3: Have you checked our extensive FAQ?<br /><br /> <a href="http://www.postgresql.org/docs/faq"target="_blank"> http://www.postgresql.org/docs/faq</a><br /></blockquote></div><br/><br clear="all" /><br />-- <br />Usama Munir Dar <a href="http://linkedin.com/in/usamadar">http://linkedin.com/in/usamadar</a><br/>Consultant Architect<br />Cell:+92 321 5020666<br />Skype: usamadar <br />
Hi, please don't top post to someone who didn't used this convention in answering you. It's impolite. I edited the mail a bit to return sanity. > On Nov 29, 2007 9:00 PM, Douglas McNaught <doug@mcnaught.org > <mailto:doug@mcnaught.org>> wrote: > > On 11/29/07, ohp@pyrenet.fr <mailto:ohp@pyrenet.fr> > <ohp@pyrenet.fr <mailto:ohp@pyrenet.fr>> wrote: > > > On Thu, 29 Nov 2007, Gregory Stark wrote: > > > > > What do you want the resulting bytea to look like? > > > > > example : id = 9 , bytea = '\000\000\011' IIRC > > What do you expect to happen when server and client are > differently-endian? > > -Doug > Usama Dar írta:> Does it matter if you have written an explicit cast for int to bytea?> You don't know what't endianness is, do you? Say, you have a number: 0x12345678. This is stored differently depending on the endianness. Big-endian (like Sparc, Motorola, etc): 0x12 0x34 0x56 0x78 Little-endian (Intel-compatibles, etc): 0x78 0x56 0x34 0x12 So, how do you want your number to come out as a byte array? Since a bytea is a sequence of bytes as stored in memory, you may have different meaning for an int->bytea conversion. It's your homework to look up what's "network order" is. :-) But it would give you consistent answer no matter what CPU your server uses. -- ---------------------------------- Zoltán Böszörményi Cybertec Schönig & Schönig GmbH http://www.postgresql.at/
On Nov 29, 2007 9:35 PM, Zoltan Boszormenyi <zb@cybertec.at> wrote:
1) i wasn't aware people are sensitive to top email reply vs inline, apologies if it offended you
2) i know what a byte order is , i just thought your interface i.e. libpq would convert it to the local byte order.
Hi,
please don't top post to someone who didn't used this convention
in answering you. It's impolite. I edited the mail a bit to return sanity.
> <mailto:doug@mcnaught.org>> wrote:
>
> On 11/29/07, ohp@pyrenet.fr <mailto:ohp@pyrenet.fr>> <ohp@pyrenet.fr <mailto:ohp@pyrenet.fr>> wrote:Usama Dar írta:
>
> > On Thu, 29 Nov 2007, Gregory Stark wrote:
> >
> > > What do you want the resulting bytea to look like?
> > >
> > example : id = 9 , bytea = '\000\000\011' IIRC
>
> What do you expect to happen when server and client are
> differently-endian?
>
> -Doug
>> Does it matter if you have written an explicit cast for int to bytea?You don't know what't endianness is, do you?
>
Say, you have a number: 0x12345678.
This is stored differently depending on the endianness.
Big-endian (like Sparc, Motorola, etc):
0x12 0x34 0x56 0x78
Little-endian (Intel-compatibles, etc):
0x78 0x56 0x34 0x12
So, how do you want your number to come out as a byte array?
Since a bytea is a sequence of bytes as stored in memory,
you may have different meaning for an int->bytea conversion.
It's your homework to look up what's "network order" is. :-)
But it would give you consistent answer no matter
what CPU your server uses.
1) i wasn't aware people are sensitive to top email reply vs inline, apologies if it offended you
2) i know what a byte order is , i just thought your interface i.e. libpq would convert it to the local byte order.
--
----------------------------------
Zoltán Böszörményi
Cybertec Schönig & Schönig GmbH
http://www.postgresql.at/
--
Usama Munir Dar http://linkedin.com/in/usamadar
Consultant Architect
Cell:+92 321 5020666
Skype: usamadar
Usama Dar wrote: > > > > 2) i know what a byte order is , i just thought your interface i.e. > libpq would convert it to the local byte order. > You haven't thought this through. Data traveling over libpq is still text, not binary, in most cases, so byte order is irrelevant at that time. The translation to a bytea (if possible) would be done after the data was already on the server and the int was in its native, architecture dependent form. The short answer is thus still that there is no sane consistent cast from int to bytea. If you want a bytea then it's really up to you to contruct the byte array. cheers andrew