Timezone offset displayed though it shouldn't be stored I new to Postgres and v9.6.3 on a Linux system.

From the docs and the PostgreSQL: Up and Running book, I learned that the timestamptz type just subtracts the offset of a timestamp on insertion and then just stores UTC on disk. The timezone information is 'lost' so to say.

Now I'm wondering how the psql client can display the timezone correctly despite that: 

The following row was created by something like:

insert into table values ('1999-12-31T00:00:00+0100'::timestamptz, ...);


and is displayed as 

select time from table;

          time          | field1 | field2 | 
------------------------+--------+---------
 1999-12-31 00:00:00+01 |      1 |       1 | 
...


and 

select time AT TIMEZONE 'Europe/Berlin' from table;

          time          
---------------------
 1999-12-31 00:00:00
...


You can see in the first snippet that postgres seems to know the correct timezone from the insertion ('Europe/Berlin' which has +01h offset to GMT in winter) But how does this come?
I would have expected it do display UTC time.
From the PostgreSQL documentation you link to, about halfway down the page:


  When a timestamp with time zone value is output, it is always converted from UTC to the current timezone zone, and displayed as local time in that zone. To see the time in another time zone, either change timezone or use the AT TIME ZONE construct.


So (as Evan Carroll hinted in his comment), if your system has 'Europe/Berlin' set as timezone, you would expect to see the UTC date/times output using that timezone.

To confirm, try inserting a date/time from another timezone; that should also be output showing the 'Europe/Berlin' time instead. Or, try changing timezone, and confirm that the dates that were showing the time from Europe/Berlin now show the time from the new time zone instead.