2013/5/23 Euler Taveira <[email protected]>

> 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_
> );
>
>
Cara, nesse caso (para o dump de toda base), não é mais fácil simplesmente
pegar os OIDs dos largeobjects?

Exemplo:

SELECT 'GRANT SELECT ON LARGE OBJECT ' || oid || ' TO :user;' FROM
pg_catalog.pg_largeobject_metadata;

Dá pra embutir isso na função dele ou num script. Algum problema ou risco
de fazer dessa forma que eu não estou pensando?

PS: Não sei porque usam -Ft no pg_dump ao invés de -Fc...

Atenciosamente,
-- 
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a