Re: [GENERAL] express composite type literal as text

From: Eric Hanson <elhanson(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: pgsql-general(at)postgresql(dot)org, pgsql-bugs(at)postgresql(dot)org
Subject: Re: [GENERAL] express composite type literal as text
Date: 2015-02-22 21:17:37
Message-ID: CACnWs=VvoRjmzb5fxvmiQZwc+Ly0DhsoqHUe=WZQxNbtu=75qQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs pgsql-general

On Sun, Feb 22, 2015 at 12:56 PM, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:

> Well, it's an unimplemented feature anyway. I poked into it and noticed
> that the equivalent case for arrays works, because that operator is
> "anyarray = anyarray". enforce_generic_type_consistency() observes that
> we have an unknown literal that's going to be passed to an anyarray
> function argument, so it resolves "anyarray" as the actual array type
> determined from the other anyarray argument position.
>
> There's no corresponding behavior for RECORD, because RECORD is not
> treated as a polymorphic type for this purpose -- in particular, there is
> no built-in assumption that the two arguments passed to record_eq(record,
> record) should be the same record type. (And, indeed, it looks like
> record_eq goes to some effort to cope with them not being identical;
> this may be essential to make dropped-column cases work desirably.)
>
> Conceivably we could invent an ANYRECORD polymorphic type, extend the
> polymorphic type logic to deal with that, and redefine record_eq as taking
> (anyrecord, anyrecord). However that'd likely break some scenarios along
> with fixing this one. It'd require some research to figure out what's
> the least painful fix. In any case, anything involving a new datatype is
> certainly not going to be a back-patchable bug fix.
>
> Given that it's worked like this pretty much forever, and there have been
> few complaints, it's probably not going to get to the front of anyone's
> to-do list real soon ...
>

Ok. Thanks for the info. I like the ANYRECORD idea.

As for the behavior, consider me logging one complaint. :) The consequence
is that you can't use composite types in a REST interface or any other
string-based interface, unless the POST handler look up the type of all
columns and checks for the special case, to add the explicit cast. It adds
a lot of overhead that is 99% unnecessary.

Thanks,
Eric

In response to

Browse pgsql-bugs by date

  From Date Subject
Next Message erich 2015-02-23 10:26:22 BUG #12797: Cannot compile pgAgent
Previous Message Tom Lane 2015-02-22 20:56:26 Re: [GENERAL] express composite type literal as text

Browse pgsql-general by date

  From Date Subject
Next Message Samuel Smith 2015-02-23 02:53:06 Re: Postgres architecture for multiple instances
Previous Message Tom Lane 2015-02-22 20:56:26 Re: [GENERAL] express composite type literal as text