CREATE OR REPLACE FUNCTION public.fn_question_3_3()
RETURNS TABLE(name character varying, surname character varying, person_t person_type)
AS
$$
DECLARE
pt person_type;
BEGIN
RETURN QUERY
SELECT DISTINCT pr.name, pr.surname, pr.person_t
FROM "Person" pr
CROSS JOIN "Professor" prof
CROSS JOIN "LabTeacher" lt
CROSS JOIN "Student" st;
IF pr.amka = prof.amka THEN
pt = 'Professor';
ELSIF pr.amka = lt.amka THEN
pt = 'LabTeacher';
ELSE
pt = 'Student';
END IF;
pt = pr.person_t;
END;
$$
LANGUAGE 'plpgsql';
SELECT*FROM fn_question_3_3()
Então, estou tentando fazer uma consulta simples aqui, onde verifico o amka da pessoa e, se for igual a uma das outras tabelas, atualiza a coluna person_t e retorna nome, sobrenome e person_t.
O problema é que a consulta SELECT * FROM fn_wuestion_3_3()
leva mais de 10 minutos para ser concluída e esse não deveria ser o caso de uma consulta como essa. Qualquer ajuda seria apreciada, pois sou muito novo em bancos de dados e postgresql/pgadmin4.
tabela: "Pessoa" tem 4820 linhas
tabela: "Professor" tem 123 linhas
tabela: "LabProfessor" tem 77 linhas
tabela: "Estudante" tem 3194 linhas
As definições de índice são pr para "Pessoa", prof para "Professor", st para tabelas "Estudante" e lt para "Professor de Laboratório", respectivamente.