Hi, I found a mysterious behavior when we use LIKE operator on char(n) data type.
postgres=# select 'abcd'::char(20) LIKE 'ab%cd'; ?column? ---------- f (1 row) postgres=# select 'abcd'::char(4) LIKE 'ab%cd'; ?column? ---------- t (1 row) LIKE operator (that is eventually processed by textlike) considers the padding space of char(n) data type as a part of string. On the other hands, equal operator ignores the padding space when it compares two strings. postgres=# select 'abcd'::char(20) = 'abcd'; ?column? ---------- t (1 row) postgres=# select 'abcd'::char(4) = 'abcd'; ?column? ---------- t (1 row) The LIKE operator on char(n) data type is implemented by textlike(). at pg_proc.h: DATA(insert OID = 1631 ( bpcharlike PGNSP PGUID 12 1 0 0 0 f f f f t f i s 2 0 16 "1042 25" _null_ _null_ _null_ _null_ _null_ textlike _null_ _null_ _null_ )); It calls GenericMatchText() with length of the target string, calculated by VARSIZE_ANY_EXHDR, however, it includes the padding space. It seems to me bcTruelen() gives the correct length for char(n) data types, instead of this macro. Is this behavior as expected? or, bug? Thanks, -- KaiGai Kohei <kai...@kaigai.gr.jp> -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers