On Fri, Jul 16, 2004 at 16:49:25 -0500,
Bruno Wolff III <bruno@wolff.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.