Query Processing at backend (I/O on disk)
Pretty much a WAG because you haven't shown EXPLAIN (BUFFERS, OUTPUT) data, but:

select id from demo_bbb b; -- database query time: ~26ms


If you're on 9.2 or newer this probably did an index-only scan on the unique index used to implement the primary key constraint. Given the latter times that's the most likely case; if it'd done a seqscan (as it would on older versions) you'd have got faster results from later queries.

select column_10 from demo_bbb b ;  -- database query time: 46ms, 48ms, 51ms
select column_05 from demo_bbb b ;  -- database query time: 37ms, 38 ms, 45ms
select * from demo_bbb b ;          -- database query time: 28ms, 32ms, 37ms


These are likely to be doing seqscans, and possibly out-of-line TOAST fetching.

The different times will be partly due to caching effects, possibly partly offset by the need to read in more out-of-line TOAST data when you select more columns.

PostgreSQL uses two levels of caching - the operating system's disk cache, and its own shared_buffers. Both are block caches. It does not have a query result cache.

For more information see the PostgreSQL manual and the existing resources about PostgreSQL benchmarking, tuning, caching behaviour, etc.