I made a mistake in describing the query I tried. The query I tried was:
update new_table set new_attribute = (select old_attribute from old_table, new_table where old_table.id = new_table.id) where old_table.id = new_table.id
It should be written has
update new_table set new_attribute=old_attribute from old_table where old_table.id=new_table.id;
It actually returns the error "ERROR: more than one row returned by a subquery used as an expression" if ran.