I haven't found a way to make the planner constraint exclusion kicking in:
=# explain select * from offer where during @> '2014-08-03'::timestamptz;
Append (cost=0.00..27.25 rows=3 width=248) -> Seq Scan on offer (cost=0.00..0.00 rows=1 width=248) Filter: (during @> '2014-08-03 00:00:00+01'::timestamp with time zone) -> Seq Scan on offer_201408 (cost=0.00..13.62 rows=1 width=248) Filter: (during @> '2014-08-03 00:00:00+01'::timestamp with time zone) -> Seq Scan on offer_201409 (cost=0.00..13.62 rows=1 width=248) Filter: (during @> '2014-08-03 00:00:00+01'::timestamp with time zone)
Similar results using tztzrange OP tstzrange operators with OP in &&, @>, <@.
Seqscans aside, as these tables are empty so they are expected, I wonder if there is a way to organize the operators used in the constraints and the ones used in the query so that the query planner would be able to exclude some of the tables before querying them, as is easy to do implementing range constraints on the base tstz type and its ordering operators.
It would be also nice if the always failing constraint on the base table could suggest the planner that there is no record to be found there: I think this would be easier to implement but not as useful as for the ranges.
I guess you should write down a feature request on the hackers list. tsrange should be included also on that request.
I tested on the beta version and it does not work either.