"Vee" <sefer(at)hotmail(dot)com> writes:
> -- The problem query
> select data, regexp_matches(data, '(h..l)')
> from test;
>> hello {hell}
> Since I have no "where" clause, I would expect to see all the rows in the
> result of the second case, with possibly a NULL value for the non-matched
> rows.
No. regexp_matches() returns setof something, meaning a row per match.
When you have no match, you get no rows. And that in turn means that
the calling select produces no rows --- just as it could also produce
more than one row from a given table row.
I think the behavior you are after is probably more like that of
substring().
regards, tom lane