Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Cascading não está funcionando?

Olá. Estou enfrentando o seguinte problema:

ERROR:  update or delete on table "aluno" violates foreign key constraint "aluno_curso_aluno_id_fkey" on table "aluno_curso"
DETAIL:  Key (id)=(1) is still referenced from table "aluno_curso".
SQL state: 23503

Isso acontece ao tentar deltar registro da tabela aluno, mesmo depois de ter criado a tabela 'aluno_curso' habilitando o cascading.

create table aluno_curso (
    aluno_id integer,
    curso_id integer,
    primary key (aluno_id, curso_id),
        foreign key (aluno_id)
            references aluno (id),
        foreign key (curso_id)
            references curso (id)
    on delete cascade
);
    insert into aluno_curso (aluno_id, curso_id) values (1, 1);
    insert into aluno_curso (aluno_id, curso_id) values (2, 1);

    insert into aluno_curso (aluno_id, curso_id) values (3, 1);
    insert into aluno_curso (aluno_id, curso_id) values (1, 3);

O erro acontece agora quando vou dar esse comando:

delete from aluno where id = 1;

Alguém sabe o que posso estar fazendo errado?

2 respostas
solução!

Encontrei a solução do problema. Eu acabei associando o cascading à Foreign Key de 'curso_id' e não a de 'aluno_id'. Isso porque me distraí e achei que o 'on delete cascade' era posto no final da Query e acabava valendo para os dois, mas me enganei. Ele precisa ser definido individualmente para cada Foreign Key. Também espacei melhor a Query para ficar mais visível. Essa foi a solução:

create table aluno_curso (
    aluno_id integer,
    curso_id integer,
    primary key (aluno_id, curso_id),

    foreign key (aluno_id)
    references aluno (id)
    on delete cascade
    ,

    foreign key (curso_id)
    references curso (id)
);

Olá Samuel, tudo bem?

Fico feliz em saber que você conseguiu resolver o seu problema e compartilhou aqui com a gente a solução :).

Continue assim e bons estudos!