How can I exclude range overlaps if one range may be empty?
Use inclusive ranges

Adding an argument like '[]' to int4range tells it to use inclusive ranges, meaning that, eg, (5,5) is not empty because it contains 5. Eg:

SELECT int4range(3, 6) @&gt; int4range(5, 5, '[]');   -- t
SELECT int4range(3, 6) @&gt; int4range(50, 50, '[]'); -- f


Therefore, this exclusion works as I expected:

ALTER TABLE heights_in_feet ADD CONSTRAINT no_overlap 
  EXCLUDE USING gist (int4range("min", "max", '[]') WITH &amp;&amp;);