PostgreSQL ще направи това, ако изграждате индекса с text_pattern_ops оператор, или ако използвате C collation.
Ако използвате произволно друго съпоставяне, PostgreSQL не може да извлече почти нищо за него. Наблюдавайте това в много често срещаното сортиране "en_US.utf8".
select * from (values ('03.000221.1'), ('03.0002212'), ('03.000221.3')) f(x) order by x;
x
-------------
03.000221.1
03.0002212
03.000221.3
Което след това естествено води до този грешен отговор с вашата заявка:
select * from (values ('03.000221.1'), ('03.0002212'), ('03.000221.3')) f(id)
where ((id >= '03.000221.'::text) AND (id < '03.000221.Z'::text))
id
-------------
03.000221.1
03.0002212
03.000221.3