Re: [pgbr-geral] Rodar script de gente grande

2008-12-12 Por tôpico Ernesto Martins
Mozart;

Não entendi exatamente o que seu procedimento faz, porém tenho um problema
semelhante. Faço diariamente cargas de arquivos de texto em 160 tabelas e
que somam mais de 1.900.000 linhas.

Se o seu problema é carregar dados, então posso compartilhar com você minha
experiência.

Após pesquisas na internet e testes com esta quantidade grande de
informações lhe afirmo que as ferramentas visuais são mais lentas que os
comandos rodados diretamente do console do seu banco.

Para você ter idéia, a carga nestas 160 tabelas que somam mais de 1.900.000
linhas demorou apenas 1:54 ( um minuto e cinquenta e quatro *segundos* ).

Eu uso o comando COPY alimentado por um arquivo com os dados somente; sem os
INSERT.

Para ter esta eficiência eu dropo a tabela, recrio-a, e faço o copy com o
arquivo somente com os dados, após isto eu crio os índices; todo este
procedimento está dentro do meu script.

São tabelas de um mainframe IBM que eu transporto para o PostgreSQL
diariamente; não tenho problemas ao dropar as tabelas, pois eu uso-as como
cópias de segurança e não há nenhum sistema utilizando-as diretamente.

Como cada caso é um caso, se seu problema é semelhante ao meu sugiro que
você analise esta forma de carga de seus dados ( COPY tabelaSQL FROM
'/home/minha_tabela.txt; ) ; para mim está funcionando perfeitamente.

Ernesto Jorge Costa Martins
Universidade Federal do Rio Grande - FURG
Centro de Processamento de Dados

2008/12/11 Mozart Hasse mozart.ha...@usa.net

 Preâmbulo da pergunta:

 Tenho o problema frequente de rodar scripts monstruosamente grandes (um
 milhão de comandos SQL separados por ponto-e-vírgula) com frequência. O
 problema é que pode ocorrer um erro láá no meio dele e aí eu
 preciso retomar daquele ponto e só então continuar com os comandos
 subsequentes. Meus requisitos:

 1. A estação roda Windows, conecta-se ao servidor que é necessariamente
 outra máquina e tem pouca memória. Não, eu não estou interessado em
 soluções que precisem de alguns gigas de RAM nem usem outro sistema
 operacional.

 2. Recortar e colar um texto desse tamanho em um programa qualquer detona
 minha estação, assim como simplesmente mostrar este texto na tela. Quero um
 programa que leia sequencialmente cada comando do script a partir de um
 arquivo e descarte-o da memória assim que executar com sucesso.

 3. Carregar um arquivo desse tamanho é demorado porque consome toda a
 memória da estação (a área de transferência do Windows consome toda a
 memória virtual com um texto desse tamanho). Quero um programa inteligente
 o
 bastante para colocar na memória apenas o necessário durante a execução.

 4. QUANDO acontece um erro, eu quero retomar do ponto onde o erro ocorreu,
 e
 não recomeçar tudo porque estava no meio da mesma transação. Ou seja,
 quero ter a opção de rodar cada comandinho do script dentro de uma
 transação.

 5. QUANDO acontecer um erro, eu também quero que ele PARE, dê COMMIT no que
 funcionou até esse ponto e nem tente rodar os comandos subsequentes.

 6. Caso não seja possível abortar em caso de erro, eu queria poder olhar o
 resultado do script enquanto o programa manda os comandos para o banco, e
 abortar caso encontre algum aviso comprometedor. O problema é que, como o
 script é grande, o resultado do script também é grande e por si só já
 detona a memória da máquina. Eu não quero esperar ele rodar o script
 inteirinho para só depois abrir o arquivo de LOG e descobrir que ele não
 fez
 nada porque deu erro de sintaxe no segundo comando.

 Isso não tem necessariamente a ver com Postgres, apesar de ser muito bom
 saber se há alguma ferramenta que faça isso conectando com ele.

 Pois é, então finalmente a pergunta é:


 Alguém conhece algum programa que faça isso ou algo parecido??


 Atenciosamente,


 Mozart Hasse


 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Qualquer usuário pode executar o va ccum ?

2008-12-12 Por tôpico Emerson Casas Salvador
2008/12/11 titofr t...@uel.br:


 Emers0n wrote:

 vacuum pode ser executado pelo owner ou por um superusuario
 nao existe revoke para vacuum

 Owner do banco ou da tabela ? O que está acontecendo aqui é o seguinte: o
 usuario user1 pode executar o comando Vaccum tabela1 em uma tabela que
 pertence a ele. Se for uma tabela pequena, não há problema o meu receio
 é o usuário executar esse comando numa tabela grande que demande recurso do
 servidor. Por isso a minha preocupação em bloquear a execução do vacuum para
 as tabelas pelos usuarios de conexão do banco

owner da tabela e do banco ou superusuario
como o titofr falou, vc pode colocar o postgres como owner para
impedir que o usuario comum rode o vacuum

porém não vejo problema em deixar o dono da tabela rodar vacuum

caso esteja impactando no desempenho vc pode ajustar os parametros do
vacuum no postgresql.conf
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Rodar script de gente grande

2008-12-12 Por tôpico Fábio Telles Rodriguez
2008/12/11 Mozart Hasse mozart.ha...@usa.net:
 Preâmbulo da pergunta:

 Tenho o problema frequente de rodar scripts monstruosamente grandes (um
 milhão de comandos SQL separados por ponto-e-vírgula) com frequência. O
 problema é que pode ocorrer um erro láá no meio dele e aí eu
 preciso retomar daquele ponto e só então continuar com os comandos
 subsequentes. Meus requisitos:


Meu caro Mozart, você escreveu um e-mail longo, mas não colocou as
principais informações. Não disse como é o perfil da sua carga com
milhões de instruções SQL. Não tenho como adivinhar que tipo de
operação você está fazendo, se é uma operação do tipo fechamento de
mês onde vários dados são totalizados e transferidos de uma tabela
para outra, se é um cálculo mensal do tipo folha de pagamento ou se é
uma carga de dados vindo de outra fonte via txt por exemplo. Seja como
for, observe algumas coisas:

- COPY é melhor que multiplos INSERTs, que é melhor que INSERTS c/
PREPARED STATEMENTs, que são melhores que INSERTs individuais.
- INSERT é melhor que DELETE (escrevi um artigo sobre isso em:
http://www.midstorm.org/~telles/2007/11/29/nao-use-delete-use-insert/)
- Nenhum processo em lote deve ser executado via CLIENT/SERVER, rode
tudo via PL dentro do banco que você vai ter uma performance
absurdamente melhor;
- Se você puder agendar sua rotina em lote para um horário mais calmo,
pense em fazer uma configuração específica de desempenho para a carga,
por exemplo diminuindo o número de conexões e aumentando a memória
para uma conexão individual,
- Após a carga, sempre rode um vacuum analize nas tabelas afetadas
- Se tiver que fazer uma carga de dados em TXT com possíveis
problemas... considere trazer tudo para uma tabela burra (uma tabela
TEMPORÁRIA com um campo TEXT sem PK) para receber os dados
inicialmente dentro do banco. Depois de carregar todos os dados na
tabela burra, você poderá tratar os dados com SQL e mover os registros
problemáticos para outra área e aí sim transferir os registros da sua
tabela burra para os locais corretos.
- Remova constraints e índices quando for fazer grandes cargas e deixe
para reconstruí-los no final.
- Use cursores se estiver estourando a sua memória!
- Aprenda a utilizar COMMIT, ROLLBACK e SAVEPOINT corretamente e
estimar de quantos em quantos registros realizar um COMMIT.
- Aprenda a fazer o tratamento de erros em PL,

Como você pode ver, grandes caras exigem muito planejamento, estudo,
teste, etc. Não é trivial, mas os esforços costumam trazer resultados
surpreendentes. Se precisar de ajuda profissional, acredito que temos
algumas pessoas aqui na lista que poderão lhe prestar bons serviços
nesta área.

Espero ter ajudado.

[]s
Fábio Telles
-- 
blog: http://www.midstorm.org/~telles/
e-mail / jabber: fabio.tel...@gmail.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] Alterar dono banco todo

2008-12-12 Por tôpico Lucas Paz
Bom dia pessoal,

Preciso de mais 1 ajuda, tenho 1 banco de dados com mais de 1000 tabelas
(1039 pra ser exato) e preciso alterar o dono do banco e de todas as
tabelas... tem alguma maneira prática de fazer isso sem fazer o dump do
banco?

Obrigado pela atenção.

-- 
Lucas Paz
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Alterar dono banco todo

2008-12-12 Por tôpico Fábio Telles Rodriguez
2008/12/12 Lucas Paz lucas...@gmail.com:
 Bom dia pessoal,

 Preciso de mais 1 ajuda, tenho 1 banco de dados com mais de 1000 tabelas
 (1039 pra ser exato) e preciso alterar o dono do banco e de todas as
 tabelas... tem alguma maneira prática de fazer isso sem fazer o dump do
 banco?

Claro, você vai precisar de:

http://www.postgresql.org/docs/8.3/static/sql-altertable.html

e também de:
http://www.postgresql.org/docs/8.3/static/infoschema-tables.html

Com isso você deve chegar lá!

[]s
Fábio Telles
-- 
blog: http://www.midstorm.org/~telles/
e-mail / jabber: fabio.tel...@gmail.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] duvida na utilização de aspas sim ples

2008-12-12 Por tôpico Anderson
Bom dia Lista,

pessoal estou fazendo um procedure mas surgiu um problema com a aspas
simples, o problema esta em como utilizar elas no meio de uma sql que tem
varias concatenações.

XCRIATABELA :='CREATE TABLE '|| XTABELA ||' ('||
 XNID ||' NUMERIC(6,0) DEFAULT nextval((*tb_remessa_seq::text*)::regclass)
NOT NULL,'||
 XNUMEROREMESSA ||' NUMERIC(6,0) DEFAULT nextval(('*||XSEQUENCIA||*
'::text)::regclass),'||
 XANO ||' NUMERIC(4,0),'||
 XUSUARIOINCLUSAO ||' NUMERIC(6,0),'||
 XDTINCLUSAO ||' TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT
(*now*::text)::timestamp(6)
without time zone,'||
 XUSUARIOALTERACAO ||' NUMERIC(6,0),'||
 XDTALTERACAO ||' TIMESTAMP WITHOUT TIME ZONE,'||
 XSETOR ||' NUMERIC(6,0),'||
 XCDUNIDADE ||' NUMERIC(6,0),'||
 XORDEM ||' NUMERIC(2,0),'||
 XDOCUMENTO ||' VARCHAR(50),'||
 XASSUNTO ||' VARCHAR(450),'||
 XDE ||' VARCHAR(150),'||
 XPARA ||' VARCHAR(150),'||
 XAC ||' VARCHAR(150)
) WITH OIDS';

EXECUTE XCRIATABELA;


nas partes em vermelho teria que ter aspas simples, porem se as coloco da
erro, dizendo que as sequencias não existem.

obrigado

Anderson
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Alterar dono banco todo

2008-12-12 Por tôpico joao junior
vc tem linux em maos? :)
se tiver te mando um shell script :P

On Fri, 2008-12-12 at 10:49 -0200, Fábio Telles Rodriguez wrote:
 2008/12/12 Lucas Paz lucas...@gmail.com:
  Bom dia pessoal,
 
  Preciso de mais 1 ajuda, tenho 1 banco de dados com mais de 1000 tabelas
  (1039 pra ser exato) e preciso alterar o dono do banco e de todas as
  tabelas... tem alguma maneira prática de fazer isso sem fazer o dump do
  banco?
 
 Claro, você vai precisar de:
 
 http://www.postgresql.org/docs/8.3/static/sql-altertable.html
 
 e também de:
 http://www.postgresql.org/docs/8.3/static/infoschema-tables.html
 
 Com isso você deve chegar lá!
 
 []s
 Fábio Telles

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] duvida na utilização de aspas si mples

2008-12-12 Por tôpico William Leite Araújo
2008/12/12 Anderson jackvalant...@gmail.com

 Bom dia Lista,

 pessoal estou fazendo um procedure mas surgiu um problema com a aspas
 simples, o problema esta em como utilizar elas no meio de uma sql que tem
 varias concatenações.


   Use a função *quote_literal*. Deseja que o texto 'qualquer' esteja com
as aspas simples, então basta usar :

  *quote_literal*('qualquer');




 XCRIATABELA :='CREATE TABLE '|| XTABELA ||' ('||
  XNID ||

  ' NUMERIC(6,0) DEFAULT nextval(('||quote_literal('*
tb_remessa_seq')||'::text*)::regclass) NOT NULL,'||

  XNUMEROREMESSA ||' NUMERIC(6,0) DEFAULT nextval(('*
 ||quote_literal(XSEQUENCIA)||*'::text)::regclass),'||
  XANO ||' NUMERIC(4,0),'||
  XUSUARIOINCLUSAO ||' NUMERIC(6,0),'||
  XDTINCLUSAO ||' TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT ('||quote_literal(
 *now*())||')::timestamp(6) without time zone,'||
  XUSUARIOALTERACAO ||' NUMERIC(6,0),'||
  XDTALTERACAO ||' TIMESTAMP WITHOUT TIME ZONE,'||
  XSETOR ||' NUMERIC(6,0),'||
  XCDUNIDADE ||' NUMERIC(6,0),'||
  XORDEM ||' NUMERIC(2,0),'||
  XDOCUMENTO ||' VARCHAR(50),'||
  XASSUNTO ||' VARCHAR(450),'||
  XDE ||' VARCHAR(150),'||
  XPARA ||' VARCHAR(150),'||
  XAC ||' VARCHAR(150)
 ) WITH OIDS';

 EXECUTE XCRIATABELA;


 nas partes em vermelho teria que ter aspas simples, porem se as coloco da
 erro, dizendo que as sequencias não existem.

 obrigado

 Anderson











 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




-- 
William Leite Araújo
Mobile Solution Manager   - QualiConsult
Analista de Banco de Dados
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] duvida na utilização de aspas sim ples

2008-12-12 Por tôpico Luiz Henrique




Anderson escreveu:
Bom dia Lista,
  
pessoal estou fazendo um procedure mas surgiu um problema com a aspas
simples, o problema esta em como utilizar elas no meio de uma sql que
tem varias concatenaes.
  
XCRIATABELA :='CREATE TABLE '|| XTABELA ||' ('||
XNID ||' NUMERIC(6,0) DEFAULT nextval((tb_remessa_seq::text)::regclass)
NOT NULL,'||
XNUMEROREMESSA ||' NUMERIC(6,0) DEFAULT nextval(('||XSEQUENCIA||'::text)::regclass),'||
XANO ||' NUMERIC(4,0),'||
XUSUARIOINCLUSAO ||' NUMERIC(6,0),'||
XDTINCLUSAO ||' TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT (now::text)::timestamp(6)
without time zone,'||
XUSUARIOALTERACAO ||' NUMERIC(6,0),'||
XDTALTERACAO ||' TIMESTAMP WITHOUT TIME ZONE,'||
XSETOR ||' NUMERIC(6,0),'||
XCDUNIDADE ||' NUMERIC(6,0),'||
XORDEM ||' NUMERIC(2,0),'||
XDOCUMENTO ||' VARCHAR(50),'||
XASSUNTO ||' VARCHAR(450),'||
XDE ||' VARCHAR(150),'||
XPARA ||' VARCHAR(150),'||
XAC ||' VARCHAR(150)
) WITH OIDS';
  
EXECUTE XCRIATABELA;
  
  
nas partes em vermelho teria que ter aspas simples, porem se as coloco
da erro, dizendo que as sequencias no existem.
  
obrigado
  
Anderson
  
  
  
  
  
  
  
  
  
  
  

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
  

Bom dia Anderson,

teste dessa maneira...

...
XNID ||' NUMERIC(6,0) DEFAULT nextval((''tb_remessa_seq''::text)::regclass)
NOT NULL,'||
XNUMEROREMESSA ||' NUMERIC(6,0) DEFAULT nextval(('''||XSEQUENCIA||'''::text)::regclass),'||
...
...
XDTINCLUSAO ||' TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT (''now''::text)::timestamp(6)
without time zone,'||
...

veja que no so aspas duplas mas sim duas aspas simples...

Abrao!!

-- 
Luiz Henrique Livrari
Implantador de Sistemas Jr.
MSI SOLUES - Unidade Ourinhos
Av. Dr. Altino Arantes, 131 Sala 145 - 146
Centro - Ourinhos/SP - Brasil
Fone/Fax: +55 (14) 3324-8181
www.msisolucoes.com.br


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] RES: Banco Multiempresa

2008-12-12 Por tôpico Idesk
Oi pessoal,

 

To vendo essa conversa se estender, e quero dar minha opinião, pois tenho
sistema multiempresa rodando.

Quando vejo a discussão sobre as permissões no banco de dados, me pergunto
por que o usuário terá a liberdade de operar em cima dele fora do sistema.
Creio que somente o DBA devesse ter esse direito. Sendo assim, no sistema,
ao iniciar, seta-se uma variável global com o código da empresa atual, e
somente esses dados serão carregados/listados/alterados. E ninguém tem a
senha de login no banco, exceto o DBA. Criar esquemas vai gerar um custo
muito alto de manutenção desse banco, pra sincronizar metadados, mesmo que
seja para CX2, como disseram. E separar em tabelas distintas também.
Concordo plenamente com o Mozart.

 

De: Adriano Espinoza de Oliveira [mailto:adrianoespin...@gmail.com] 
Enviada em: quinta-feira, 11 de dezembro de 2008 13:52
Para: Comunidade PostgreSQL Brasileira
Assunto: Re: [pgbr-geral] Banco Multiempresa

 

Mozart, concordo com você!!!

Mas, como você mesmo, pode servir para alguem...

No caso do Saulo, está na cara que trata-se de um caixa 2, e bla bla bla... 

 

APARENTEMENTE digo APARENTEMENTE uma esquartejada de leve não vai trazer
problemas

Adriano

 

2008/12/11 Mozart Hasse mozart.ha...@usa.net

Bases separadas?!

Para brincar até dá, mas... e se o teu banco tiver mais 800 tabelas?? O que
é que se faz com as 2000 chaves estrangeiras e os 4000 índices?! Cria em
todas as bases de filiais ?! Lindo, e aí é só configurar alguns
arquivinhos super triviais do SLONY para sincronizar as míseras 200 tabelas
de uso comum a todas as filiais.

Vamos pensar *médio*. E se você quiser tirar um relatório gerencial das 30
filiais do mesmo *estado* ? (Brasil inteiro não, que eu propus pensar
*médio*!) Quantos UNIONs você vai ter de fazer se a consulta de uma empresa
só você já precisa de umas 8? Quanto tempo você acha que o planejador vai
gastar só descobrindo se ele dá conta de rodar um comando desse tamanho?

Agora o divertido mesmo vai ser atualizar a estrutura desse negócio. Que tal
rodar o mesmo script ALTER TABLE nas 30 filiais? Acha que um scriptzinho
criado via cut-paste ou macros mirabolantes para usar na linha de comando
quebram teu galho?

Bom, o interessante vai ser explicar para o cliente que ele vai precisar de
um
DBA toda a vez que quiser cadastrar uma filial nova. Fico imaginando quanto
tempo o cliente vai gastar com DBAs só monitorando o SLONY para garantir que
ele atualizou as tabelas comuns em todas essas bases e que todas as tabelas
estão com a mesma estrutura. O legal mesmo vai ser alguém precisar rodar (ou
precisar de algo equivalente) um UPDATE em todas as filiais de uma vez,
dentro
de uma só transação...

Sinto muito, essa idéia de esquartejar bases até pode servir para alguém,
mas no meu caso, na-na-ni-na-não.

Mozart Hasse




 Sobre o assunto, eu *não* misturaria dados de empresas distintas em uma
mesma
 tabela sem utilizar um controle de permissões a nível de registros (como
os
 descritos acima) porque seria fácil, senão trivial, conseguir dados
indevidos.
 Como alguns colegas sugeriram, eu optaria por utilizar esquemas para
separar
 empresas e utilizaria a nomenclatura nomedomodulo_nomedoobjeto para
designar
 os objetos (tabelas, funções, visões, etc).


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

 

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Rodar script de gente grande

2008-12-12 Por tôpico Mozart Hasse
Detalhando:

 o proprio psql do postgres faz isso
 
 coloque a seguinte linha no inicio do arquivo
 \set ON_ERROR_STOP
 
 psql dbname  infile
 
 http://www.postgresql.org/docs/8.3/interactive/backup-dump.html na
 sessão 24.1.1. Restoring the dump
 
 o manual refere-se para restauração de dump, mas tb pode ser utilizado
 para o que vc quer fazer

Sim, é mesmo. Alterar o arquivo texto (por mais simples que seja a
alteração) é um passo bastante inconveniente, mas não deixa de ser uma
opção. Não conhece algo um pouco mais amigável, com botões e cliques?
Outra coisa: tem como o arquvo de saída conter APENAS os comandos que deram
erro e as respectivas mensagens? Isso ajudaria bastante a melhorar o
desepmenho e reduzir o volume de lixo que seria inevitavelmente jogado fora.

 E da onde vem esse monte de scripts?estão em arquivo texto, ou algum
 programa gera isso p/ vc?

Tenho um programa que gera INSERTs e UPDATEs para cada registro de certas
tabelas, e às vezes essas tabelas são bem grandes. Isso serve por exemplo
para garantir que um certo conjunto de tabelas tenha exatamente os registros
que eu quero, independente dos registros existentes (que o usuário pode criar
sem eu me importar com eles). Mesmo que eu quisesse puramente garantir uma
cópia da minha base, não posso simplesmente dar um TRUNCATE seguido de um
monte de INSERTs porque essas tabelas são de consulta e têm inúmeras
referências de outras tabelas. Remover e recriar *todas* essas chaves
estrangeiras daria um trabalho monstruoso, levaria uma eternidade para
reconstruir os índices, enquanto que comandos de INSERT e UPDATE podem ser
feitos com a base no ar, aos poucos conforme a carga do servidor.

Outra coisa que uso para gerar scripts enormes são meta-scripts (SELECTs que
geram como saída texto de comandos SQL) para geração de índices e
eventuais rotinas auxiliares. Os scripts de criação de bases vazias (para
testes internos e novos clientes) também são bem grandes.

Sugestões?

Mozart Hasse


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Rodar script de gente grande

2008-12-12 Por tôpico Mozart Hasse
Bom,

 Não conheço, mas escrever um programa que roda um alter table de
 cada vez não parece ser muito complicado

De fato, mas não quero reinventar a roda. Colocar as firulas que eu gostaria
vai consumir muito mais tempo.

 Utilize copy ao invés de inserts, ele foi feito para isso!

Ele foi feito para casos que nunca dão erro. Não me servem, quero mexer na
estrutura também.


Mozart


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Rodar script de gente grande

2008-12-12 Por tôpico Mozart Hasse
Fabio Henrique,

 Eu tambem rodo script enormes, nao grandes iguais ao seus, com 1 milhao 
 de linhas, mas em torno de 100 mil linhas com varios inserts em cada 
 linha. (...) Para rodar esses 
 scripts eu utilizo o PGadmin que, com certeza, nao foi feito para rodar 
 scripts deste tamanho. 

Concordo plenamente!

 Se eu nao me engano, ele faz justamente isso q vc 
 qr, ele vai inserindo as linhas e dando commit ate onde der erro, nao 
 precisando vc ter q rodar o script novamente. Uma outra alternativa 
 seria para cada linha vc inserir um 'BEGIN;' no inicio e um 'COMMIT;' no 
 final.

Pelo que usei, não faz não. Quando tem um monte de comandos separados por
';', ele considera tudo parte da mesma transação, o que é um desastre nesse
caso. Isso me obriga a rodar um pedaço de cada vez, porque:

1. Se *der* erro de integridade referencial, eu perdi o tempo que ele ficou
rodando antes do erro (e o rollback que eu não pedi para ele fazer). Depois,
tenho de achar o bendito comando dentro do script (nem sempre é fácil quando
o script é enorme), rodar tudo até antes do comando que deu erro, apagar o
trecho já executado, corrigir o comando e executar dali em diante.

2. Se *não der* erro de integridade referencial, preciso rodar um trechinho
de cada vez para não estourar o limite de LOCKs do servidor (o chato é que
ele leva um tempão para descobrir que o limite foi atingido). Não, eu não
quero aumentar esse valor porque o valor padrão é perfeitamente aceitável
para uso normal, e não quero ficar parando, reconfigurando e reiniciando
serviço toda a vez que quiser rodar um inocente script numa estação.

Valeu,

Mozart Hasse


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Alterar dono banco todo

2008-12-12 Por tôpico Lucas Paz
qual comando daria conta?

2008/12/12 Fábio Telles Rodriguez fabio.tel...@gmail.com

 2008/12/12 Lucas Paz lucas...@gmail.com:
  Opa só uso linux :P ...
 

 Gente... para criar um script quando um único comando SQL dá conta?

 []s


 
 
  2008/12/12 joao junior joao.jun...@bra03034.conab.gov.br
 
  vc tem linux em maos? :)
  se tiver te mando um shell script :P
 
  On Fri, 2008-12-12 at 10:49 -0200, Fábio Telles Rodriguez wrote:
   2008/12/12 Lucas Paz lucas...@gmail.com:
Bom dia pessoal,
   
Preciso de mais 1 ajuda, tenho 1 banco de dados com mais de 1000
tabelas
(1039 pra ser exato) e preciso alterar o dono do banco e de todas as
tabelas... tem alguma maneira prática de fazer isso sem fazer o dump
do
banco?
  
   Claro, você vai precisar de:
  
   http://www.postgresql.org/docs/8.3/static/sql-altertable.html
  
   e também de:
   http://www.postgresql.org/docs/8.3/static/infoschema-tables.html
  
   Com isso você deve chegar lá!
  
   []s
   Fábio Telles
 
  ___
  pgbr-geral mailing list
  pgbr-geral@listas.postgresql.org.br
  https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
 
 
 
  --
  Lucas Paz
 
 
  ___
  pgbr-geral mailing list
  pgbr-geral@listas.postgresql.org.br
  https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
 
 



 --
 blog: http://www.midstorm.org/~telles/
 e-mail http://www.midstorm.org/%7Etelles/e-mail / jabber:
 fabio.tel...@gmail.com
 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




-- 
Lucas Paz
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Alterar dono banco todo

2008-12-12 Por tôpico Fábio Telles Rodriguez
2008/12/12 Fábio Telles Rodriguez fabio.tel...@gmail.com:
 2008/12/12 Lucas Paz lucas...@gmail.com:
 qual comando daria conta?

 2008/12/12 Fábio Telles Rodriguez fabio.tel...@gmail.com

 2008/12/12 Lucas Paz lucas...@gmail.com:
  Opa só uso linux :P ...
 

 Gente... para criar um script quando um único comando SQL dá conta?


 Ok, ok... você não olhou os links que eu te passei, olhou?

Mas se você estiver na versão 8.3 do PostgreSQL... pode user isto aqui também:

http://www.postgresql.org/docs/8.3/static/sql-reassign-owned.html

E antes que alguém se levante para me criticar sim, eu acredito
que todos deveriam ler a documentação.

Atenciosamente,
Fábio Telles
-- 
blog: http://www.midstorm.org/~telles/
e-mail / jabber: fabio.tel...@gmail.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Alterar dono banco todo

2008-12-12 Por tôpico Fábio Telles Rodriguez
2008/12/12 Fábio Telles Rodriguez fabio.tel...@gmail.com:
 2008/12/12 Fábio Telles Rodriguez fabio.tel...@gmail.com:
 2008/12/12 Lucas Paz lucas...@gmail.com:
 qual comando daria conta?

 2008/12/12 Fábio Telles Rodriguez fabio.tel...@gmail.com

 2008/12/12 Lucas Paz lucas...@gmail.com:
  Opa só uso linux :P ...
 

 Gente... para criar um script quando um único comando SQL dá conta?


 Ok, ok... você não olhou os links que eu te passei, olhou?

 Mas se você estiver na versão 8.3 do PostgreSQL... pode user isto aqui também:

 http://www.postgresql.org/docs/8.3/static/sql-reassign-owned.html

Um pequeno deslize. Esta funcionalidade surgiu no 8.2 e não no 8.3. :-)

-- 
blog: http://www.midstorm.org/~telles/
e-mail / jabber: fabio.tel...@gmail.com
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Rodar script de gente grande

2008-12-12 Por tôpico Mozart Hasse
Telles,

 Meu caro Mozart, você escreveu um e-mail longo, mas não colocou as
 principais informações. 

Obrigado por colaborar com base na informação disponível.

 Não tenho como adivinhar que tipo de
 operação você está fazendo, se é uma operação do tipo fechamento de
 mês onde vários dados são totalizados e transferidos de uma tabela
 para outra, se é um cálculo mensal do tipo folha de pagamento ou se é
 uma carga de dados vindo de outra fonte via txt por exemplo. 

Basta assumir o pior caso que é o que você aparentemente usou como base:
tenho todas essas coisas e mais algumas.

 - COPY é melhor que multiplos INSERTs, que é melhor que INSERTS c/
 PREPARED STATEMENTs, que são melhores que INSERTs individuais.
 - INSERT é melhor que DELETE (escrevi um artigo sobre isso em:
 http://www.midstorm.org/~telles/2007/11/29/nao-use-delete-use-insert/)
 - Após a carga, sempre rode um vacuum analize nas tabelas afetadas
 - Use cursores se estiver estourando a sua memória!

ok

 - Nenhum processo em lote deve ser executado via CLIENT/SERVER, rode
 tudo via PL dentro do banco que você vai ter uma performance
 absurdamente melhor;

Obrigado por informar, mesmo que viole meus requisitos.

 - Se você puder agendar sua rotina em lote para um horário mais calmo,
 pense em fazer uma configuração específica de desempenho para a carga,
 por exemplo diminuindo o número de conexões e aumentando a memória
 para uma conexão individual,

Obrigado por informar, mesmo que viole meus requisitos. Não quero mexer no
servidor para rodar um script inocente. Sim, eu me conformo com o desempenho
possível dadas as limitações que indiquei.

 - Se tiver que fazer uma carga de dados em TXT com possíveis
 problemas... considere trazer tudo para uma tabela burra (uma tabela
 TEMPORÁRIA com um campo TEXT sem PK) para receber os dados
 inicialmente dentro do banco. Depois de carregar todos os dados na
 tabela burra, você poderá tratar os dados com SQL e mover os registros
 problemáticos para outra área e aí sim transferir os registros da sua
 tabela burra para os locais corretos.
 - Aprenda a fazer o tratamento de erros em PL,

Sim, realmente, só que eu gostaria de uma solução mais simples e prática.
Não quero montar um script ou um programa que monte um script fazendo isso
para cada tabela quando se tratar de carga. Isso exige conhecimento da
estrutura, chaves, tipos de dados e integridade referencial. No meu caso é
muito esforço em qualificação e pré-processamento para um inocente script
de carga, que por sinal eu gostaria muito de *não* mexer.

 - Remova constraints e índices quando for fazer grandes cargas e deixe
 para reconstruí-los no final.

A lista de constraints é, no meu caso, imprevisível. O número de índices e
constraints afetados é enorme, os passos extras necessários para tirar e por
essas constraints e índices é muito inconveninente. O tempo que o servidor
ficaria quase que totalmente inacessível reconstruindo-os é bastante
indesejado.

 - Aprenda a utilizar COMMIT, ROLLBACK e SAVEPOINT corretamente e
 estimar de quantos em quantos registros realizar um COMMIT.

Isso depende da configuração do servidor. Não quero depender disso.

Obrigado pelas dicas, mesmo que não sejam bem o que eu estava procurando.

Mozart Hasse


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] Modelo de campeonatos de Futebol.

2008-12-12 Por tôpico Eduardo Schoedler
Olá pessoal.

Alguém aí já passou pelo problema de modelar uma base de dados especialmente 
para controle de campeonatos de futebol ? Brasileirão, regionais, 
libertadores, mundial, copa do Brasil, Copa do Mundo, Campeonato Europeu, 
Campeonato Espanhol, etc obviamente, considerando todas as regras de 
negócio... rsrsrs.

Detalhe: as estatísticas que serão necessárias é quase igual à da Globo... 
=/

Tô ferrado! rsrs.

Qualquer sugestão é *MUITO* bem vinda.

Sds,
Eduardo. 

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Alterar dono banco todo

2008-12-12 Por tôpico Lucas Paz
Fabio,

Acho que ou não expliquei direito ou não entendi direito o que vc quer
dizer...
Eu li o que vc me sugeriu! Alterar o dono do banco é fácil... o problema é
alterar as 1093 tabelas. Aqui usamos uma aplicação de terceiro que usa o
postgresql, e quando o banco foi criado foi com o dono postgres, depois se
criou um usuario para o banco então 70% das tabelas estão como dono o
postgres e o resto da com o usuario novo...

o banco é o 8.1... então não tem como usar esse comando...

alguma outra sugestão?


2008/12/12 Fábio Telles Rodriguez fabio.tel...@gmail.com

 2008/12/12 Fábio Telles Rodriguez fabio.tel...@gmail.com:
  2008/12/12 Fábio Telles Rodriguez fabio.tel...@gmail.com:
  2008/12/12 Lucas Paz lucas...@gmail.com:
  qual comando daria conta?
 
  2008/12/12 Fábio Telles Rodriguez fabio.tel...@gmail.com
 
  2008/12/12 Lucas Paz lucas...@gmail.com:
   Opa só uso linux :P ...
  
 
  Gente... para criar um script quando um único comando SQL dá conta?
 
 
  Ok, ok... você não olhou os links que eu te passei, olhou?
 
  Mas se você estiver na versão 8.3 do PostgreSQL... pode user isto aqui
 também:
 
  http://www.postgresql.org/docs/8.3/static/sql-reassign-owned.html

 Um pequeno deslize. Esta funcionalidade surgiu no 8.2 e não no 8.3. :-)

 --
 blog: http://www.midstorm.org/~telles/
 e-mail http://www.midstorm.org/%7Etelles/e-mail / jabber:
 fabio.tel...@gmail.com
 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




-- 
Lucas Paz
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Alterar dono banco todo

2008-12-12 Por tôpico Sebastian SWC
2008/12/12 Lucas Paz lucas...@gmail.com:
 Fabio,

 Acho que ou não expliquei direito ou não entendi direito o que vc quer
 dizer...
 Eu li o que vc me sugeriu! Alterar o dono do banco é fácil... o problema é
 alterar as 1093 tabelas. Aqui usamos uma aplicação de terceiro que usa o
 postgresql, e quando o banco foi criado foi com o dono postgres, depois se
 criou um usuario para o banco então 70% das tabelas estão como dono o
 postgres e o resto da com o usuario novo...

 o banco é o 8.1... então não tem como usar esse comando...

 alguma outra sugestão?

tem! crie uma pl (plpgsql, pra mais detalhes veja o manual...) que
busque todas as tabelas do seu sistema e depois crie um sql dinamico
do tipo alter table XX... mudando o owner da tabela.

eu acho bem mais simples assim

um aBraço!

-- 
Atenciosamente,
Sebastian Selau Webber Colombo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Alterar dono banco todo

2008-12-12 Por tôpico André Volpato
Lucas Paz escreveu:
 Fabio,

 Acho que ou não expliquei direito ou não entendi direito o que vc quer 
 dizer...
 Eu li o que vc me sugeriu! Alterar o dono do banco é fácil... o 
 problema é alterar as 1093 tabelas. 

Naa... ele te mandou o link pra documentação do schema, que é aonde estão
armazenados os nomes das tuas tabelas:

http://www.postgresql.org/docs/8.3/static/infoschema-tables.html

Então, a partir da lista das tabelas, vc pode criar um SQL que faça
ALTER TABLE em cada uma delas.

Gotcha ?


-- 

[]´s, ACV


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] duvida na utilização de aspas sim ples

2008-12-12 Por tôpico Anderson
obrigado resolvi usando o quote_literal

2008/12/12 William Leite Araújo william.ara...@grupoquali.com.br

 2008/12/12 Anderson jackvalant...@gmail.com

 Bom dia Lista,

 pessoal estou fazendo um procedure mas surgiu um problema com a aspas
 simples, o problema esta em como utilizar elas no meio de uma sql que tem
 varias concatenações.


Use a função *quote_literal*. Deseja que o texto 'qualquer' esteja
 com as aspas simples, então basta usar :

   *quote_literal*('qualquer');




 XCRIATABELA :='CREATE TABLE '|| XTABELA ||' ('||
  XNID ||

   ' NUMERIC(6,0) DEFAULT nextval(('||quote_literal('*
 tb_remessa_seq')||'::text*)::regclass) NOT NULL,'||

  XNUMEROREMESSA ||' NUMERIC(6,0) DEFAULT nextval(('*
 ||quote_literal(XSEQUENCIA)||*'::text)::regclass),'||
  XANO ||' NUMERIC(4,0),'||
  XUSUARIOINCLUSAO ||' NUMERIC(6,0),'||
  XDTINCLUSAO ||' TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT ('||quote_literal(
 *now*())||')::timestamp(6) without time zone,'||
  XUSUARIOALTERACAO ||' NUMERIC(6,0),'||
  XDTALTERACAO ||' TIMESTAMP WITHOUT TIME ZONE,'||
  XSETOR ||' NUMERIC(6,0),'||
  XCDUNIDADE ||' NUMERIC(6,0),'||
  XORDEM ||' NUMERIC(2,0),'||
  XDOCUMENTO ||' VARCHAR(50),'||
  XASSUNTO ||' VARCHAR(450),'||
  XDE ||' VARCHAR(150),'||
  XPARA ||' VARCHAR(150),'||
  XAC ||' VARCHAR(150)
 ) WITH OIDS';

 EXECUTE XCRIATABELA;


 nas partes em vermelho teria que ter aspas simples, porem se as coloco da
 erro, dizendo que as sequencias não existem.

 obrigado

 Anderson











 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




 --
 William Leite Araújo
 Mobile Solution Manager   - QualiConsult
 Analista de Banco de Dados

 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] SET CONSTRAINTS DEFERRED

2008-12-12 Por tôpico Emerson Casas Salvador
2008/12/11 Rogério Grando rogeriogra...@planin.com.br:

 Ola pessoal;
  Estamos migrando da versão 7.4 para 8.2 mas estamos tendo vários
  obstáculos nessa migração e agora na reta final apareceu outro
  problema... anteriormente fazia-mos uma transação da seguinte forma.
  Temos 2 tabelas: pai e filho sendo que a tabela filho possui uma fk
  cascade no delete com a pai.
  Executo: DELETE pai WHERE co_pai = 1; INSERT INTO pai (co_pai) VALUES
  (2); UPDATE filho SET co_pai = 2;
  Na versão 7.4 funciona, na 8.2 não, li a documentação e vi que posso
  mudar a fk para DEFERRED e devo colocar BEGIN; e COMMIT; para que a FK
  seja validada no final da transação, mas para isso teria que alterar
  toda minha aplicação.
  Teria alguma configuração postgres.conf ou alguma outra forma de estar
  mudando esse comportamento para que seja = a do 7.4?
 Oi Sebastian, desculpe se não fui claro, mas o meu problema é que no
 momento em que excluo o registro da tabela pai já é excluído da tabela
 filho, portanto no momento que faço um update na tabela filho com o novo
 código do pai o registro filho ja não existe mais, quando eu executava
 isso na versão 7.4 a exclusão da fk era feita no final da transação
 acabava não fazendo nada pois o registro filho ja havia sido modificado
 com o novo código do pai.


   Não é mais fácil primeiro alterar o filho para depois excluir o pai??

 --
 Shander Lyrio


 Ola Shander Lyrio;

 Com certeza, mas o que me ocorre aqui é que encontramos em uma
 determinada parte do ERP executando dessa forma, então corrigimos essa
 funcionalidade, mas pode ocorrer em outra parte também, e como sempre o
 desenvolvimento não dispõe de muito tempo para varrer toda a aplicação
 eu tava pesando que houvesse alguma configuração que pudesse me ajudar.




isso resolve seu problema

---
DEFERRABLE
NOT DEFERRABLE

This controls whether the constraint can be deferred. A constraint
that is not deferrable will be checked immediately after every
command. Checking of constraints that are deferrable can be postponed
until the end of the transaction (using the SET CONSTRAINTS command).
NOT DEFERRABLE is the default. Only foreign key constraints currently
accept this clause. All other constraint types are not deferrable.
-
referência: http://www.postgresql.org/docs/8.3/interactive/sql-createtable.html
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] [Bulk] Re: Rodar script de gente grande

2008-12-12 Por tôpico Shander Lyrio
Mozart Hasse wrote:
 Obrigado por informar, mesmo que viole meus requisitos. Não quero mexer no
 servidor para rodar um script inocente. Sim, eu me conformo com o desempenho
 possível dadas as limitações que indiquei.

O script é inocente ou de gente grande???

--
Shander Lyrio
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral