On Fri, Sep 30, 2016 at 2:28 PM, <[email protected]> wrote:
> 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
É, acho que essa não é muito intuitiva mesmo... Vou tentar explicar.
Esse erro acontece quando você executa o DELETE na tabela "
transporte.movimento_veiculo", e certamente há uma chave estrangeira da
tabela "anexo_movimento_veiculo" para a "movimento_veiculo", certo? Bem,
para verificar se o DELETE que você executou não fere essa *constraint* (ou
seja, se não está deletando um "movimento_veiculo" que ainda é referenciado
em "anexo_movimento_veiculo"), o PostgreSQL executa o SELECT que você vê aí:
SELECT 1 FROM ONLY "transporte"."anexo_movimento_veiculo" x
WHERE $1 OPERATOR(pg_catalog.=) "id_movimento_veiculo"
FOR KEY SHARE OF x
Sendo "$1" o valor que está sendo excluído pela PK (ou uma UK) de "
movimento_veiculo".
Mas, veja que esse SELECT é executado internamente pelo PostgreSQL (a
maioria das pessoas nem sabe que é um SELECT que é feito para verificar
FK), e essa consulta só existe porque há uma chave estrangeira na tabela "
anexo_movimento_veiculo" (que esse *owner* é responsável por ela), isso
significa que o proprietário/*owner* dessa tabela é quem está forçando essa
restrição, logo esse mesmo proprietário/*owner* deve ter permissão de
executar esse SELECT acima, assim sendo o PostgreSQL faz essa consulta como
se estivesse logado com esse usuário.
Ou seja, a solução do seu problema é:
1. Veja qual o *owner* da "anexo_movimento_veiculo"
2. Adicione permissão necessária. Por exemplo:
GRANT USAGE ON SCHEMA transporte TO <nome usuário>;
3. Teste novamente, e se der algum erro nos avise aqui, pode ter mais
alguma permissão faltando.
Meio chatinho essa parte, fui claro?
Pode perguntar aí se tiver alguma dúvida.
Atenciosamente,
--
Matheus de Oliveira
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral