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

2008-12-15 Por tôpico Shander Lyrio
Mozart Hasse wrote:
 Tenho centenas de scripts, muitos deles pequenos, outros enormes, porém 
 todos são
 *simples*, e, portanto, considero-os *inocentes* por não fazerem nada além
 de singelos comandos SQL.

Algum outro script para o PostGreSql pode enviar outro tipo de comando 
que não SQL??

 Entretanto, alguns deles são, além de simples e singelos, radicalmente 
 extensos pela
 quantidade de registros que precisam conferir, inserir, corrigir ou excluir 
 de maneira
 *independente*. Este tamanho faz com que não possam ser rodados decentemente
 nas ferramentas costumeiramente usadas para rodar scripts, e o fato de seu 
 *tamanho*

Acredito que por DBA's as ferramentas costumeiramente utilizadas para 
rodar scripts seja psql e eu utilizo aqui para qualquer tamanho de 
scripts e problemas de velocidade resolvo com transações e o comando copy.

 (assim como o número de registros e a estrutura das tabelas que eles 
 manipulam) exigir tratamento especial me faz julgar adequado classificá-los 
 como scripts de 
 gente grande.

Então estamos falando simplesmente de scripts grandes e não scripts 
complexos.

 Acha pequeno porque tem maior? Azar o seu. Acha simplório porque usa comandos 
 mais 
 incomuns, menos documentados e que teoricamente trazem maior desempenho? Boa 
 sorte 
 para você e tomara que não precise gastar o dia inteiro criando-os, ou que 
 pelo 
 menos faça seu cliente engolir esse custo todo por causa de alguns segundos 
 ou mesmo um 
 par de horas de diferença na execução final ou na disponibilidade do servidor.

Quanto é que você está me pagando para engolir sua arrogânica e seus 
xiliques?? Que tal se ater ao tema e deixar para explodir seus hormonios 
juvenis em alguém que tenha obrigação de aturar seu mal humor. Se sua 
esposa/namorada está dormindo de calça jeans queira por favor não trazer 
isto para a lista. Aqui se discute PostGreSql e creio que não temos 
psicólogos entre nós.

 Quanto a quem não gostou da minha lista de requisitos:
 
 Estou buscando resultados objetivos, corretamente representados pela minha 
 lista de requisitos, lista essa que não tenho nenhuma necessidade ou 
 interesse de 
 justificar, porque sei perfeitamente que temos rumos diferentes, objetivos 
 diferentes, quadro de 
 pessoal com qualificações diferentes, clientes com visões radicalmente 
 diferentes da 
 utilidade e necessidade de DBAs especializados em Postgres e, se muito, de 
 vez em quando, em alguns 
 casos, um banco de dados em comum.
 
 Em suma: a lista de motivos que me leva a cada requisito é bastante 
 específica e não tem absolutamente nada a ver com Postgres.

PostGreSql é um excelente SGDB mas não faz mágica assim como nenhum 
outro SGDB o faz. Que tal tentar abrir sua cabeça para novas idéias?

 A quem pensa que conhece meu problema melhor do que eu e pode mudar meus 
 requisitos e necessidades pelo que postei... Poupem o tempo da lista e o meu 
 também.

Mais uma prova de que está falando besteira e que escreveu este e-mail 
com o intuito apenas de criar polêmica. Requisitos não se mudam pela 
experiência do DBA. Cabe ao DBA inteligente criar uma solução melhor 
(talvez sem scripts) para resolver o problema de forma mais rápida e não 
explodir sua agonia por não conseguir fazer em uma lista de discussão. 
Se não tem como criar uma solução melhor, chegue para o cliente e diga: 
Sinto muito não dá para fazer!, agora tenha certeza disso após ter 
tentado várias alternativas ao invés de massificar toda a sua esperança 
em scripts imensos. Não vai ser muito bom se seu cliente não encontrar 
outro DBA que faça o mesmo serviço, mais rápido com uma solução diferente.

Sinto muito, prefiro guardar minhas idéias porque tu és arrogante d+ 
para aceitar que podem existir soluções melhores do que (a sua) scripts 
imensos. Boa sorte com sua imensa lista de requisitos (que meio que 
duvido sejam dos clientes) e com sua imutável solução pobre.

Abraços,

--
Shander Lyrio
___
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-15 Por tôpico Luiz Henrique
Boa tarde Mozart,

Você já deu uma olhada no PgLoader??

http://pgfoundry.org/projects/pgloader/

Sei que você está trabalhando com INSERTs no seu script e o PgLoader 
trabalha com COPY mas ainda assim acho que vale a pena dar uma olhada...


Abraço!!

-- 
Luiz Henrique Livrari
Implantador de Sistemas Jr.
MSI SOLUÇÕES - 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


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] 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


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] 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


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

2008-12-11 Por tôpico Emerson Casas Salvador
2008/12/11 Mozart Hasse [EMAIL PROTECTED]:
 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

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
___
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-11 Por tôpico Adriano Espinoza de Oliveira
E da onde vem esse monte de scripts?estão em arquivo texto, ou algum
programa gera isso p/ vc?
Adriano

2008/12/11 Mozart Hasse [EMAIL PROTECTED]

 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] Rodar script de gente grande

2008-12-11 Por tôpico Sebastian SWC
2008/12/11 Mozart Hasse [EMAIL PROTECTED]:
 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.


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

-- 
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] Rodar script de gente grande

2008-12-11 Por tôpico joao junior
Utilize copy ao invés de inserts, ele foi feito para isso!


On Thu, 2008-12-11 at 15:36 -0200, Sebastian SWC wrote:
 2008/12/11 Mozart Hasse [EMAIL PROTECTED]:
  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.
 
 
 Não conheço, mas escrever um programa que roda um alter table de
 cada vez não parece ser muito complicado
 

___
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-11 Por tôpico 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. Eu sei os problemas que vc deve estar tendo pois trabalhar com 
arquivo texto desse tamanho não é a coisa mais facil... Para rodar esses 
scripts eu utilizo o PGadmin que, com certeza, nao foi feito para rodar 
scripts deste tamanho. 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.

Espero ter ajudado, pelo menos em uma parte do seus problemas...


Fabio Henrique

Mozart Hasse escreveu:
 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

   



___ 
Yahoo! Mail - Sempre a melhor opção para você! 
Experimente já e veja as novidades. 
http://br.yahoo.com/mailbeta/tudonovo/
 

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