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

Responder a