From: | "Joe Conway" <joseph(dot)conway(at)home(dot)com> |
---|---|
To: | "Billy G(dot) Allie" <Bill(dot)Allie(at)mug(dot)org>, <pgsql-bugs(at)postgresql(dot)org> |
Subject: | Re: Bug #467: Can't insert a value of 0 (zero) into a Bytea |
Date: | 2001-09-25 04:05:39 |
Message-ID: | 005e01c14577$56e9eb40$0705a8c0@jecw2k1 |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
> > Short Description
> > Can't insert a value of 0 (zero) into a Bytea type.
> >
> > Long Description
> > It does not zeem possible to insert a value of zero (0) into a bytea
type. A
> > lso, using '\134' (the octal code for a backslash) causes byteain() to
genera
> > te an error message.
> >
> > As a side issue, how can one tell a backslash followed by 3 digits (four
byte
> > s of data) from an encoded byte of data? It seems to me that byteaout()
shou
> > ld always output an octal escape sequence per byte, even if the
character is
> > printable. That way the result is unambiguous in meaning (even if it is
wast
> > eful of bytes).
>
> Further investigation provided the following information:
>
> 1. To insert a zero value the '\\000' sequence is required.
>
> 2. To insert a backslash, 4 backslashes are required (i.e. '\\\\')
>
> Therefore, to insert a backslash followed by the characters 1, 2, and 3
(four
> bytes of data), you would uses the sequence '\\\\123'. On retrieval from
the
> database, the sequence '\\123' would be returned.
>
> Can anyone confirm that this is correct. If it is, then this bug report
can be closed.
This was recently discussed on hackers (see
http://fts.postgresql.org/db/mw/msg.html?mid=1032591) but the short answer
is that you are correct (and that this is not a bug).
[root(at)jec-linux /root]# psql -U postgres test
Welcome to psql, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help on internal slash commands
\g or terminate with semicolon to execute query
\q to quit
test=# create table t1(f1 bytea);
CREATE
test=# insert into t1(f1) values('\\\\123');
INSERT 1482289 1
test=# select f1 from t1;
f1
-------
\\123
(1 row)
test=# select octet_length(f1) from t1;
octet_length
--------------
4
(1 row)
test=# insert into t1(f1) values('\\000');
INSERT 1482290 1
test=# select f1 from t1 where f1 = '\\000';
f1
------
\000
(1 row)
test=# select octet_length(f1) from t1 where f1 = '\\000';
octet_length
--------------
1
(1 row)
HTH,
-- Joe
From | Date | Subject | |
---|---|---|---|
Next Message | srinivas | 2001-09-25 05:26:15 | how to return multiple values from a function |
Previous Message | Kevin Way | 2001-09-24 16:18:10 | Re: [HACKERS] Server crash caused by CHECK on child |