webness definitivamente el que entiende bien el problema sos vos.
Yo te recomiendo algo...
create unas tablas de prueba e inserta algunos registros.
Prueba en una nueva función parte por parte de lo que tienes hecho. Mira primero en un solo for y una sentencia de actualización si los valores por los que pasa el ciclo lo hace correctamente.
Cuando te cerciores de que todo anda bien, añade otro for y haz el respectivo seguimiento de la función. Tomandolo parte por parte, entenderás mejor la panorámica del asunto y podrás identificar fácilmente los errores.
Los errores en plpgsql son muy engañosos y no siempre detectan correctamente el error.
Cita: ERROR: record "real_data" is not assigned yet
suena como si no se hubiera ejecutado el select into.
Ahora bien, cuando haces una consulta de varias tablas, lo mejor es hacer uso de sentencias join y no anidación de claves en el where. También es muy recomendable hacer uso de los alias en los campos precedidos por el nombre de la tabla. Fijate que tu campo en la consulta es sl.pk_locale y desde el record lo llamas real_data.pk_locale. Haciendo uso de alias vas a la fija.
sl.pk_locale as pkl y desde el record se llama real_data.pkl.
saludos