Strange upper() behaviour for dateranges in PostgreSQL
'[2005-11-01,2005-12-04]' is just another string literal for a date range to represent the canonical form '[2005-11-01,2005-12-05)'. The documentation:


  The built-in range types int4range, int8range, and daterange all use
  a canonical form that includes the lower bound and excludes the upper
  bound; that is, [).


Bold emphasis mine.

Else you would have two equal values and upper() would still return a different result, which wouldn't be acceptable.