default constructor for ranges use lower bound closed '[' and upper bound open ')'. This is correct behavior, but when upper bound is same like lower bound then range is empty. Mathematically is correct again - but in database is lost information about range bounds (lower/upper is NULL). To prevent this sitiuation we must have check if lower and upper argument is same and add some 0.00001s to upper range or use another constructor like tstzrange(now(),now(),'[]') .
Is there chance to change behavior of storing ranges? Its possible store range bounds in internal structure and lower(tstzrange(now(),now())) show not NULL value or change default behavior tstzrange(timestamptz,timestamptz) - if both args are same, then store as '[]', else '[)' and only tstzrange(timestamptz,timestamtz,'[)') and tstzrange(timestamptz,timestamtz,'()') store empty range.
It's only suggestion, i don't now if somebody wants store empty range without bounds.
We must have some checks to prevent storing empty values on every place where can occur this empty range, becouse we don't want lose bound information.
Best regards, -- ------------------------------------- Ing. David TUROŇ LinuxBox.cz, s.r.o. 28. rijna 168, 709 01 Ostrava