Re: pg_get_constraintdef() doesn't always give an equal constraint - Mailing list pgsql-bugs

From Tom Lane
Subject Re: pg_get_constraintdef() doesn't always give an equal constraint
Date
Msg-id 17189.1427732517@sss.pgh.pa.us
Whole thread Raw
In response to Re: pg_get_constraintdef() doesn't always give an equal constraint  (Jeff Davis <pgsql@j-davis.com>)
List pgsql-bugs
Jeff Davis <pgsql@j-davis.com> writes:
> On Sat, 2015-03-28 at 15:08 -0400, Tom Lane wrote:
>> Basically, I think we have to change ruleutils so that it quotes anything
>> that wouldn't be seen as a simple integer or numeric constant by the
>> lexer+grammar.
>>
>> The attached patch does this; the regression test changes illustrate
>> what's going to happen to the output if we do this.

> This fixes my problem, thank you.

OK.  Given the lack of other suggestions, let's press forward with
fixing it this way.

> There are two switch statements in that function, and they have
> overlapping purposes. Can't we just always set needlabel in the first
> switch statement, and remove the second switch statement?

Meh.  The two switches are considering different things and don't have
exactly the same set of switch labels, so I don't really see that as
an improvement ...

> When I refactored it to do that (attached), I noticed that if showtype
> == -1, it returns before appending the collation. I don't see any reason
> those should be related, so I removed the early return (I don't think
> there's an actual bug there, though).

... especially since this change is outright wrong.  showtype == -1
implies that the caller is going to print a cast; we cannot insert a
COLLATE clause in the middle of that without breaking things.  (It may
be that this case is unreachable because a vanilla Const would never
have nondefault collation, but that doesn't make it a good change.)

>> Looking at the changes, I'm not 100% convinced we want to back-patch.
>> As you say, nobody's complained of this problem before, and I'm worried
>> that people will see the output changes as a bigger deal than the issue
>> we're trying to fix.

> Fine with me.

Agreed, we'll fix HEAD only.

            regards, tom lane

pgsql-bugs by date:

Previous
From: Jon Jensen
Date:
Subject: Re: pg_get_constraintdef() doesn't always give an equal constraint
Next
From: root@simply.name
Date:
Subject: BUG #12918: Segfault in BackendIdGetTransactionIds