"limaozeng" <limaozeng@163.com> wrote:
> select * from t where str in (user, 'abc...ijk');
> str
> -----------
> mzli
> abc...xyz
> (2 rows)
>
> only 'mzli' ought to be appeared in the result list.
Your query is interpreted as
select * from t::name where str in (user::name, 'abc...ijk'::name);
Strings are truncated in 63 bytes by casting to "name" type,
and the first 63 bytes of unexpected row matched the head
of values in the IN clause.
It should work if you cast "user" to text type.
=# select * from t where str in (user::text, 'abc...ijk');
The result might be a designed behavior, but is very surprising.
What should we care for it?
Regards,
---
ITAGAKI Takahiro
NTT Open Source Software Center