Prezado Fabrizio,
Todos os OIDs que estão no campo "CONTENT" da tabela CONTEUDO são menores do
que o número que você me passou como referência (2147483647).
Fiz a contagem de registros e em ambos os casos ( filtrando pelo content <
2147483647, ou sem filtrar o content) a quantidade de registros retornada é a
mesma. Isso significa que não tivemos OIDs com o número de identificação
superior a 2147483647 e dessa forma, essa não é a origem do problema.
Voce acha que se estudarmos e alterarmos o código fonte do pg_restore, com o
objetivo de tentar preservar os OIDs originais (mesmo com o backup tendo sido
gerado sem a opção "-o"), teriamos chance de obter sucesso? Ou o fato do
backup ter sido gerado sem a opção "-o" impossibilita qualquer tentativa de
recuperar os OIDs originais?
Ou o fato do backup não ter sido gerado com a opção "-o" (que iria
garantir os oids originais na restauracao) impede qualquer ação na qual
possamos vir a tentar recuperar os OIDs originais do banco, para que
apos a restauração os OIDs originais fossem preservados?
Cheguei a baixar os fontes do postgre, mas percebi que seria necessário um
grande esforço e tempo para entender todas as aplicações e chamadas que fazem
parte do dump/restore para assim tentar viabilizar uma possível solução de
manter os arquivos. E ainda assim não teríamos garantias de que o esforço
aplicado nessa idéia iria nos resolver este problema.
Em resumo, nosso problema atual é que o backup que precisamos restaurar foi
gerado sem a opção "-o", mas nós
precisamos com urgencia que os OIDs sejam preservados quando na
restauração do backup para fazer valer a relação de FK/PK na localização dos
arquivos corretos referenciados no banco.
Obrigado pela atenção!
Att.
Julio Alcantara
--- Em seg, 16/3/09, Fabrízio de Royes Mello <[email protected]> escreveu:
De: Fabrízio de Royes Mello <[email protected]>
Assunto: Re: [pgbr-geral] Enc: Problema com OIDs/LOIDs ao restaurar base de
dados com blobs
Para: [email protected], "Comunidade PostgreSQL Brasileira"
<[email protected]>
Data: Segunda-feira, 16 de Março de 2009, 13:02
2009/3/16 Julio Tavares <[email protected]>
Prezado Fabrizio,
Complementando o e-mail anterior, temos o seguinte cenário:
Existe a tabela public.conteudo, a qual armazena os nomes dos conteudos (
arquivos ) bem como o OID/LOID dos respectivos arquivos.
A tabela conteudo a que me refiro tem a seguinte estrutura:
CREATE TABLE conteudo
(
"CD_CONTEUDO" integer,
"NAME" character varying(255) NOT NULL,
"CONTENT" integer NOT NULL
)
WITH OIDS;
Caro Julio,
É realmente um caso bem peculiar... não seria o problema do campo
CONTENT que esta com o tipo INTEGER (int4) e conforme consta na
referencia que vc enviou [1] deveria ser OID e talvez isso pode ser um
problema, conforme comentou o Sr. Tom Lane.
O que pode causar problema/confusão é que o campo INT4 armazena valores na
faixa de -2147483647 a +2147483647 [3] e o OID
armazena até 4bilhoes e é "UNSIGNED" (sem sinal), ou seja, existe uma
faixa de valores que conflita entre esses 2 tipos (valores acima de
+2147483647).
Faça o seguinte teste, pesquisa por registros na tua tabela "conteudo"
onde o campo "CONTENT" seja menor que 2147483647 e verifique, usando o
lo_export se é o arquivo correto, pois pode ser que voce tenha
problemas com arquivos que foram armazenados com o OID >
2147483647....
Essa é a única coisa que me ocorreu dado o teu cenário atual... (mais alguém
pode colaborar????)...
Espero ter ajudado..
[1]
http://bytes.com/groups/postgresql/400042-pg_largeobject-oid-mistmach-after-restore
[2] http://www.postgresql.org/docs/current/interactive/datatype-oid.html
[3] http://www.postgresql.org/docs/8.3/interactive/datatype-numeric.html
--
Fabrízio de Royes Mello
>> Blog sobre PostgreSQL: http://fabriziomello.blogspot.com
Veja quais são os assuntos do momento no Yahoo! +Buscados
http://br.maisbuscados.yahoo.com_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral