- você não precisa da subconsulta
- você não precisa selecionar novamente as mensagens (a tabela de destino já está na tabela de intervalo)
- você precisa associar a consulta de origem à linha de resultado
UPDATE messages msg
SET vector = to_tsvector(lang.language::regconfig, msg.message)
FROM locales as loco
JOIN languages as lang ON loco.language_id = lang.id
WHERE msg.locale_id = loco.id
;