I am running postgresql 9.3.4. I have a table with 3 fields:

id   name  addr
---  ----  ----
1    n1    ad1
2    n2    ad2
...


I need to move the data to a new table with fields like:

id   data
---  ----
1    {'name': 'n1', 'addr': 'ad1'}
2    {'name': 'n2', 'addr': 'ad2'}
...


row_to_json is not the solution for me as SELECT t.id, row_to_json(t) as data FROM (select id, name, addr from myt) t adds id to the result as well. Is there a way to choose the fields I need (name & addr) in my data field?

Simplest with the operator jsonb - text → jsonb to remove a single key in Postgres 9.5 or later - after converting the whole row with to_jsonb(). (Cast the result to json if you don't want jsonb.)
SELECT id, to_jsonb(t.*) - 'id' AS data
FROM   myt t;

In Postgres 10 or later, you can also remove a whole array of keys with the operator jsonb - text[] → jsonb.
There is also a better option with json_build_object() in Postgres 9.4 or later:
SELECT id, json_build_object('name', name, 'addr', addr) AS data
FROM   myt;

But there is an even simpler way since Postgres 9.3:
SELECT id, to_json((SELECT d FROM (SELECT name, addr) d)) AS data
FROM   myt;

to_json() is mostly the same as row_to_json().
Find a couple more syntax variants in the fiddle.
db<>fiddle here
Old sqlfiddle (Postgres 9.6)
Related answers:

Select columns inside json_agg

Return as array of JSON objects in SQL (Postgres)

Return total number of rows and selected (aggregated) data


