- nie potrzebujesz podzapytania
- nie musisz ponownie wybierać wiadomości (tabela docelowa jest już w tabeli zakresu)
- musisz powiązać zapytanie źródłowe z wierszem wyników
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
;