However vmstat and top show massive ram usage when I run the query. The 1gig of ram gets used up and sometimes all
of the cache (an error is thrown by postgres when the cache is maxed out).
The rowset will be held in memory local to the backend. Since the table's 750 MB in length and you're selecting all of it ...
I'd discuss this on one of the PG groups, myself, where the backend hackers hang out. This is one scalability problem for PG, i.e. Oracle doesn't generate the full rowset at once but trickle them out to you.