On 23-05-2013 10:44, Adenilton Batista da Silva wrote:
> Quando executo o dump da base para determinado usuário, não superuser
> mas com acesso completo a todos os objetos da base, o mesmo me retorna o
> erro:
> pg_dump: erro ao ler objeto grande 25543: ERRO: permissão negada para
> objeto grande 25543
>
A partir da versão 9.0, os objetos grandes (aka LO -- large objects)
passaram a ter permissões [1] (antes qualquer um podia ler e escrever
LOs). Você deve coletar todos os LOs utilizados nesta base e executar o
comando GRANT para cada oid encontrado:
GRANT SELECT ON LARGE OBJECT 12345 TO foo;
Sei que vai perguntar como listas os LOs de determinadas tabelas. Já
prevendo a sua pergunta, é necessário saber os campos que tem tipo oid e
depois ir fazendo consultas na tabela do catálogo pg_largeobject_metadata.
SELECT s.nspname AS nsp, c.relname AS rel, a.attname AS att
FROM pg_class c, pg_attribute a, pg_namespace s, pg_type t
WHERE a.attnum > 0 AND NOT a.attisdropped
AND a.attrelid = c.oid
AND a.atttypid = t.oid
AND c.relnamespace = s.oid
AND t.typname in ('oid', 'lo')
AND c.relkind in ('r', 'm')
AND s.nspname !~ '^pg_';
e depois consultar o catálogo com o retorno de cada registro:
SELECT oid FROM pg_largeobject_metadata WHERE oid IN (
SELECT _att_ FROM _nsp_._rel_
);
Substitua os três campos com os valores retornados na primeira consulta.
É claro que dá para fazer um script mas isso fica como exercício para casa.
[1] http://www.postgresql.org/docs/current/static/sql-grant.html
--
Euler Taveira Timbira - http://www.timbira.com.br/
PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral