Re: \ escapes in check constraint strings?

From: Bruno Wolff III <bruno(at)wolff(dot)to>
To: pgsql-bugs(at)postgresql(dot)org
Subject: Re: \ escapes in check constraint strings?
Date: 2004-07-16 22:01:40
Message-ID: 20040716220140.GA8868@wolff.to
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On Fri, Jul 16, 2004 at 16:49:25 -0500,
Bruno Wolff III <bruno(at)wolff(dot)to> wrote:
> I see the following behaivor on 7.4.3 and 7.4 stable from about a week ago:
> bruno=> create table test ();
> CREATE TABLE
> bruno=> alter table test add constraint test2 check('\\' = '');
> ALTER TABLE
> bruno=> \d test
> Table "public.test"
> Column | Type | Modifiers
> --------+------+-----------
> Check constraints:
> "test2" CHECK ('\\'::text = ''::text)
>
> bruno=> select '\\';
> ?column?
> ----------
> \
> (1 row)
>
> I didn't see \\ left as \\ in at least some 7.3 versions.
>
> I think this is a bug, but maybe there are different escape rules for
> strings in check constraints.
>
> In the real case that this derives from I was getting a different number
> of backslashes than I expected in a regular expression.

I think I have figured out what was going on. It looks like [\] in 7.3
regular expressions would try to match a \, but in 7.4 the ] was escaped
resulting in an invalid regular expression. So the real problem was
that in 7.3 I was using something like '[\\]' when I should have been
using '[\\\\]'.
While I was trying to figure out what was going on I was confused by
the \d output putting 2 \s where there was only one. Presumably this
is so the output could be used to recreate the constraint. This seems
reasonable, but it this particular case confused me.

In response to

Browse pgsql-bugs by date

  From Date Subject
Next Message Peter Eisentraut 2004-07-16 22:02:24 Re: \ escapes in check constraint strings?
Previous Message Bruno Wolff III 2004-07-16 21:49:25 \ escapes in check constraint strings?