Estou fazendo a seguinte consulta para em seguida fazer alguns DELETES, porem esta dando erro.
DO $$DECLARE reserva_veiculo INTEGER[]; movimento_veiculo INTEGER[]; i INTEGER;
BEGIN
i:=0;
reserva_veiculo := ARRAY (select r.id_reserva_veiculo
from transporte.movimento_veiculo m
inner join transporte.reserva_veiculo r on (r.id_movimento_veiculo = m.id_movimento_veiculo)
left join requisicoes.requisicao_reserva_veiculo req on (req.id_reserva_veiculo = r.id_reserva_veiculo)
inner join transporte.veiculo v on (v.id_veiculo = r.id_veiculo)
where
--req.numero=21937
v.placa = 'JKO-4601')::integer[];
movimento_veiculo := ARRAY (select m.id_movimento_veiculo
from transporte.movimento_veiculo m
inner join transporte.reserva_veiculo r on (r.id_movimento_veiculo = m.id_movimento_veiculo)
left join requisicoes.requisicao_reserva_veiculo req on (req.id_reserva_veiculo = r.id_reserva_veiculo)
inner join transporte.veiculo v on (v.id_veiculo = r.id_veiculo)
where
--req.numero=21937
v.placa = 'JKO-4601')::integer[];
FOR i in 1..array_length(reserva_veiculo,1) loop
raise notice 'reserva_veiculo: %', reserva_veiculo[i];
delete from transporte.motorista_reserva where motorista_reserva.id_reserva_veiculo= reserva_veiculo[i];
delete from requisicoes.requisicao_reserva_veiculo r where r.id_reserva_veiculo= reserva_veiculo[i];
delete from transporte.reserva_veiculo rv where rv.id_reserva_veiculo= reserva_veiculo[i];
end loop;
i :=0;
FOR i in 1..array_length(movimento_veiculo,1) loop
raise notice 'movimento_veiculo: %', movimento_veiculo[i];
delete from transporte.movimento_veiculo_passageiro mv where mv.id_movimento_veiculo= movimento_veiculo[i];
delete from transporte.trecho_percorrido mv1 where mv1.id_movimento_veiculo= movimento_veiculo[i];
delete from transporte.movimento_veiculo mv2 where mv2.id_movimento_veiculo= movimento_veiculo[i];
end loop;
END$$;
Porem está dando o seguinte erro:
ERROR: permission denied for schema transporte
LINE 1: SELECT 1 FROM ONLY "transporte"."anexo_movimento_veiculo" x ...
^
QUERY: SELECT 1 FROM ONLY "transporte"."anexo_movimento_veiculo" x WHERE $1 OPERATOR(pg_catalog.=) "id_movimento_veiculo" FOR KEY SHARE OF x
CONTEXT: SQL statement "delete from transporte.movimento_veiculo mv2 where mv2.id_movimento_veiculo= movimento_veiculo[i]"
PL/pgSQL function inline_code_block line 38 at SQL statement
Sim, tenho permissão para excluir.
Se eu rodar somente as linhas dos deletes, substituindo as variáveis. A exclusão acontece sem erros.
Pergunta
bruno.sdo
Olá Pessoal,
Esse é meu primeiro post.
Não tenho muito experiencia com PostgreSQL.
Estou fazendo a seguinte consulta para em seguida fazer alguns DELETES, porem esta dando erro.
DO $$DECLARE reserva_veiculo INTEGER[]; movimento_veiculo INTEGER[]; i INTEGER; BEGIN i:=0; reserva_veiculo := ARRAY (select r.id_reserva_veiculo from transporte.movimento_veiculo m inner join transporte.reserva_veiculo r on (r.id_movimento_veiculo = m.id_movimento_veiculo) left join requisicoes.requisicao_reserva_veiculo req on (req.id_reserva_veiculo = r.id_reserva_veiculo) inner join transporte.veiculo v on (v.id_veiculo = r.id_veiculo) where --req.numero=21937 v.placa = 'JKO-4601')::integer[]; movimento_veiculo := ARRAY (select m.id_movimento_veiculo from transporte.movimento_veiculo m inner join transporte.reserva_veiculo r on (r.id_movimento_veiculo = m.id_movimento_veiculo) left join requisicoes.requisicao_reserva_veiculo req on (req.id_reserva_veiculo = r.id_reserva_veiculo) inner join transporte.veiculo v on (v.id_veiculo = r.id_veiculo) where --req.numero=21937 v.placa = 'JKO-4601')::integer[]; FOR i in 1..array_length(reserva_veiculo,1) loop raise notice 'reserva_veiculo: %', reserva_veiculo[i]; delete from transporte.motorista_reserva where motorista_reserva.id_reserva_veiculo= reserva_veiculo[i]; delete from requisicoes.requisicao_reserva_veiculo r where r.id_reserva_veiculo= reserva_veiculo[i]; delete from transporte.reserva_veiculo rv where rv.id_reserva_veiculo= reserva_veiculo[i]; end loop; i :=0; FOR i in 1..array_length(movimento_veiculo,1) loop raise notice 'movimento_veiculo: %', movimento_veiculo[i]; delete from transporte.movimento_veiculo_passageiro mv where mv.id_movimento_veiculo= movimento_veiculo[i]; delete from transporte.trecho_percorrido mv1 where mv1.id_movimento_veiculo= movimento_veiculo[i]; delete from transporte.movimento_veiculo mv2 where mv2.id_movimento_veiculo= movimento_veiculo[i]; end loop; END$$;
Porem está dando o seguinte erro:
ERROR: permission denied for schema transporte LINE 1: SELECT 1 FROM ONLY "transporte"."anexo_movimento_veiculo" x ... ^ QUERY: SELECT 1 FROM ONLY "transporte"."anexo_movimento_veiculo" x WHERE $1 OPERATOR(pg_catalog.=) "id_movimento_veiculo" FOR KEY SHARE OF x CONTEXT: SQL statement "delete from transporte.movimento_veiculo mv2 where mv2.id_movimento_veiculo= movimento_veiculo[i]" PL/pgSQL function inline_code_block line 38 at SQL statement
Sim, tenho permissão para excluir.
Se eu rodar somente as linhas dos deletes, substituindo as variáveis. A exclusão acontece sem erros.
Obrigado pela atenção
Editado por bruno.sdoLink para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.