Eric Hanson <elhanson@gmail.com> writes:
> How do I express a composite type literal as text?
The rules are given in the manual ...
> I can't use the ROW() notation, because all values need to be represented
> as text over a REST api. But I can't seem to get the text-based syntax to
> work:
> select * from on_hand where item='("fuzzy dice",42,1.99)';
> yeilds
> ERROR: input of anonymous composite types is not implemented
That message isn't telling you that you've got a problem with the data
syntax, it's telling you that you need to cast the literal to a named
composite data type. This works:
# select * from on_hand where item='("fuzzy dice",42,1.99)'::inventory_item;
item | count
------------------------+-------
("fuzzy dice",42,1.99) | 1000
(1 row)
Now, I'm not too sure *why* it's making you do that --- seems like the
default assumption ought to be that the literal is the same type as
the variable it's being compared to. Perhaps there's a bug in there,
or perhaps there's no easy way to avoid this requirement. But that's
what the requirement is today.
regards, tom lane