how do i store \0 inside a text attribute?

From: Paul A Vixie <vixie(at)mfnx(dot)net>
To: pgsql-hackers(at)postgresql(dot)org
Subject: how do i store \0 inside a text attribute?
Date: 2000-12-23 18:59:11
Message-ID: 200012231859.KAA87062@redpaul.mfnx.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

for my pgcat utility i now know i have to use \nnn octal quoting for
nonprintables in the generated INSERT commands. but in testing, i
found the following oddity. this is in 7.1-b1 (cvs-current).

vixie=> create table foo ( bar text );
CREATE
vixie=> insert into foo values ( 'a\033b' );
INSERT 728084 1
vixie=> select length(bar) from foo;
length
------
3
(1 row)

great! it stored the escape. and since SELECT's front/back end protocol
is counted-string rather than quoted text, it comes back reliably (though
i still intend to try a binary cursor at some point, just to do it.) BUT:

vixie=> delete from foo;
DELETE 1
vixie=> insert into foo values ( 'a\0b' );
INSERT 728085 1
vixie=> select length(bar) from foo;
length
------
1
(1 row)

vixie=> drop table foo;
DROP
vixie=> \q

this is not what i was hoping for at ALL. evidently the implementation of
text assumes NUL-termination in other places than the parser. ultimately
this means that pgsql will need a "blob" type whose presentation format is
uuencode or some such. but is there a workaround for this using "text"?

how would someone be expected to store, say, a GIF image in a TOAST text?

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Patrick Welche 2000-12-23 19:42:43 Re: GNU readline and BSD license
Previous Message Bruce Momjian 2000-12-23 17:14:59 Re: GNU readline and BSD license