[pgbr-geral] RES: Postgresql 8.2.4 melhor á configuração - Lentidão esporádicas
Obrigado pelas informações. - Atualmente o sistema gera muitas transações de gravação (necessárias), como também consultas diversas consideradas pesadas e leves; - Monitoro a memória através do TOP, Free e felizmente esse não tem sido o problema pois está dentro da normalidade, e não chega a utilizar swap; - O Sharebuffers em 1024MB optei em função do grande número de consultas que são realizadas (algumas bem grandes); - O autovaccum está desabilitado em função de rodar diariamente (a noite) o vacuum -z -f -v d que através de consultas aqui no fórum poderia substituir o automático, está correto essa afirmação?; - Vou pesquisar um pouco mais como configurar o arquivo SYSCTL.CONF, pois estou perdido nesses parâmetros! - O parâmetro Wormem coloquei alto por relatos de utilização de ordenação, agrupadores.. e como alguns relatórios utilizam muito recurso de ordenação, agrupadores, união, subselects, dump imaginei como importante, mas não sei afirmar ao certo o ganho! - Na verdade tenho operações pesadas de gravação inclusive com transação quando leitura, por isso optei por setar o commit_delay - As chaves estrangeiras e campos de seleções muito usados contém índices, e vou seguir o seu conselho para habilitar stats_block_level e consultar as tabelas internas do banco de modo a visualizar algumas informações como recomenda. - Pelo que entendi o effective_cache_size é extramente útil para a gestão da gravação e utilização de cachê visando desafogar o banco em leituras constantes ao disco pois informações constantemente usadas ficarão em cachê, vou aumentar um pouco mais esse parâmetro para pelo menos 4GB. - Algo que não tenho feito é consultas as tabelas do banco e passarei a fazer isso com freqüência. Uma curiosidade, executei a view pg_stat_user_indexes e consta as colunas idx_scan, idx_tup_read, idx_tup_fetch, a exemplo da tabela de produto ele traz as informações abaixo, o campo que se refere e a chave primária e o primeira estatística 370911787 referente a coluna idx_scan, isso que dizer que mesmo sendo chave primária está sendo realizado uma pesquisa seqüencial? produto;produto_pkey;370911787;387804600;353876496 Obrigado! De: JotaComm [mailto:jota.c...@gmail.com] Enviada em: sábado, 15 de agosto de 2009 12:18 Para: gutembergsco...@hotmail.com; Comunidade PostgreSQL Brasileira Assunto: Re: [pgbr-geral] Postgresql 8.2.4 melhorá configuração - Lentidão exporádicas Olá, Gutemberg 2009/8/13 Gutemberg Sarlo - Hotmail gutembergsco...@hotmail.com Pessoal, bom dia! Estou com alguns problemas e dificuldade em identificar causas momentanias de lentidão do banco, penso que talvez seja alguma coisa ligada as configurações do banco e semafaros do Linux, gostaria da experiência de vocês para orientação para tentar chegar numa configuração mais equalizada a demanda e equipamento. Você está monitorando o banco e o SO utilizando ferramentas como o sar, iostat, vmstat e top. Através destas ferramentas é possível analisar como está a memória, se ocorre um uso excessivo de memória virtual, como está a cpu e o acesso ao disco. Ao mesmo tempo que você monitora isso você está fazendo uso das views pg_stat_activity para ver que operações estão sendo executados no momento que você identifica que o sistema está apresentendo sinais de lentidão? Você também pode usar a view pg_locks para observar quais os locks existentes em seu banco. Demanda pesada de consultas e transações de manutenção, aplicação web (30%) e client Server (70%). O Vacuum é executado toda madrugada automaticamente via script: su root -c vacuumdb -U $vU -h $vH -z -f -v -d $vB /home/postgresql/logs/vacuumdb2.txt Você comentou aqui do Vacuum. O Vacuum full você executa com uma certa periodicidade? Se você tiver uma boa configuraçãode max_fsm_pages o vacuum tem um periodicidade de execução menor. Você tem o autovacuum habilitado? Dell PowerEdge 1800 Xeon 8GB - HD scsi (dedicado) OpenSuse 10.3 Postgresql 8.2.4 == Sysctl.conf == kernel.shmall = 2147483648 kernel.shmmax = 2147483648 kernel.shmmni = 309329920 kernel.sem = 250 32000 100 128 #kernel.disable_cap_mlock = 1 fs.file-max = 65536 #net.ipv4.ip_local_port_range = 1024 65000 #net.core.rmem_default = 16777216 #1048576 #net.core.rmem_max = 16777216 #1048576 #net.core.wmem_default = 16777216 #262144 net.core.wmem_max = 16777216 #262144 vm.overcommit_memory = 2 vm.overcommit_ratio = 70 == Postgresql.conf == max_connections = 220 # (change requires restart) shared_buffers = 1024MB # min 128kB or max_connections*16kB max_prepared_transactions = 3 # can be 0 or more work_mem = 512MB#
Re: [pgbr-geral] Postgresql 8.2.4 melhorá config uração - Lentidão esporádicas
Olá, 2009/8/17 Gutemberg Sarlo - Hotmail gutembergsco...@hotmail.com Obrigado pelas informações. - Atualmente o sistema gera muitas transações de gravação (necessárias), como também consultas diversas consideradas pesadas e leves; - Monitoro a memória através do TOP, Free e felizmente esse não tem sido o problema pois está dentro da normalidade, e não chega a utilizar swap; - O Sharebuffers em 1024MB optei em função do grande número de consultas que são realizadas (algumas bem grandes); - O autovaccum está desabilitado em função de rodar diariamente (a noite) o “vacuum -z -f -v –d” que através de consultas aqui no fórum poderia substituir o automático, está correto essa afirmação?; Esta sim. Você pode desabilitar o autovacuum e rodar o vacuum manualmente com você está fazendo. - Vou pesquisar um pouco mais como configurar o arquivo SYSCTL.CONF, pois estou perdido nesses parâmetros! Aconselho que você de uma olhada principalmente em shmmax e shmall. - O parâmetro Wormem coloquei alto por relatos de utilização de ordenação, agrupadores.. e como alguns relatórios utilizam muito recurso de ordenação, agrupadores, união, subselects, dump imaginei como importante, mas não sei afirmar ao certo o ganho! O parâmetro work_mem é utilizado para operações de ordenação e agrupamento. Porém, acho que o valor está um pouco alto. Se você roda relatórios pesados mas não a todo o momento você pode alterar o parâmetro na sessão: Por exemplo: SET work_mem TO 10MB; Ao finalizar a sessão o valor volta para o definido no postgresql.conf. - Na verdade tenho operações pesadas de gravação inclusive com transação quando leitura, por isso optei por setar o commit_delay O commit_delay é importante quando você quer atrasar a escrita e colocar mais de uma transação ao mesmo tempo em pg_xlog através de uma chamada fsync. - As chaves estrangeiras e campos de seleções muito usados contém índices, e vou seguir o seu conselho para habilitar stats_block_level e consultar as tabelas internas do banco de modo a visualizar algumas informações como recomenda. - Pelo que entendi o effective_cache_size é extramente útil para a gestão da gravação e utilização de cachê visando desafogar o banco em leituras constantes ao disco pois informações constantemente usadas ficarão em cachê, vou aumentar um pouco mais esse parâmetro para pelo menos 4GB. - Algo que não tenho feito é consultas as tabelas do banco e passarei a fazer isso com freqüência. Uma curiosidade, executei a view pg_stat_user_indexes e consta as colunas idx_scan, idx_tup_read, idx_tup_fetch, a exemplo da tabela de produto ele traz as informações abaixo, o campo que se refere e a chave primária e o primeira estatística 370911787 referente a coluna idx_scan, isso que dizer que mesmo sendo chave primária está sendo realizado uma pesquisa seqüencial? produto;produto_pkey;370911787;387804600;353876496 Não. O parâmetro idx_scan informa o número de leituras que estão sendo feitas através do uso de índices. Se você quer ver se suas tabelas possuem leituras sequencias você deve olhar a view pg_stat_user_tables e prestar atenção ao parâmetro seq_scan pois ele indica quantas leituras sequencias já ocorreram na sua tabela. Obrigado! *De:* JotaComm [mailto:jota.c...@gmail.com] *Enviada em:* sábado, 15 de agosto de 2009 12:18 *Para:* gutembergsco...@hotmail.com; Comunidade PostgreSQL Brasileira *Assunto:* Re: [pgbr-geral] Postgresql 8.2.4 melhorá configuração - Lentidão exporádicas Olá, Gutemberg 2009/8/13 Gutemberg Sarlo - Hotmail gutembergsco...@hotmail.com Pessoal, bom dia! Estou com alguns problemas e dificuldade em identificar causas momentanias de lentidão do banco, penso que talvez seja alguma coisa ligada as configurações do banco e semafaros do Linux, gostaria da experiência de vocês para orientação para tentar chegar numa configuração mais equalizada a demanda e equipamento. Você está monitorando o banco e o SO utilizando ferramentas como o sar, iostat, vmstat e top. Através destas ferramentas é possível analisar como está a memória, se ocorre um uso excessivo de memória virtual, como está a cpu e o acesso ao disco. Ao mesmo tempo que você monitora isso você está fazendo uso das views pg_stat_activity para ver que operações estão sendo executados no momento que você identifica que o sistema está apresentendo sinais de lentidão? Você também pode usar a view pg_locks para observar quais os locks existentes em seu banco. Demanda pesada de consultas e transações de manutenção, aplicação web (30%) e client Server (70%). O Vacuum é executado toda madrugada automaticamente via script: su root -c vacuumdb -U $vU -h $vH -z -f -v -d $vB /home/postgresql/logs/vacuumdb2.txt Você comentou aqui do Vacuum. O Vacuum full você executa com uma certa periodicidade? Se você tiver uma boa configuraçãode max_fsm_pages o vacuum tem um periodicidade de execução menor. Você tem o autovacuum habilitado?
[pgbr-geral] RES: Dbexpress X Postgres
Utilize a Zeos, é muito usada pelo pessoal adepto do open source e tem ótimos recursos. Espero ter sido útil. De: pgbr-geral-boun...@listas.postgresql.org.br [mailto:pgbr-geral-boun...@listas.postgresql.org.br] Em nome de Adriano Espinoza de Oliveira Enviada em: segunda-feira,17 de agosto de 2009 09:45 Para: Comunidade PostgreSQL Brasileira Assunto: [pgbr-geral] Dbexpress X Postgres Bom dia a todos. Pessoal, estou usando Delphi com dbExpress e driver para o postgres da Devart. O problema é que não estou encontrando outro driver p/ utilizar na aplicação e o driver atual é Trial por 30 dias. Alguem tem alguma dica? Agradeço antecipadamente. Adriano ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Dbexpress X Postgres
Eu já usei o ADO, com OLEDB vc pode conectar a qualquer sgbd disponível, cria uma certa portabilidade. Já testei no linux com o wine e funcionou redondo (no caso acessava uma base ms access e fiquei surpreso por executar uma aplicação 100% windows rodar em outro SO). 2009/8/17 Adriano Espinoza de Oliveira adrianoespin...@gmail.com Bom dia a todos.Pessoal, estou usando Delphi com dbExpress e driver para o postgres da Devart. O problema é que não estou encontrando outro driver p/ utilizar na aplicação e o driver atual é Trial por 30 dias. Alguem tem alguma dica? Agradeço antecipadamente. Adriano ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Forte abraço, Aldemir Vieira ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Dbexpress X Postgres
Olá, De uma olhada em: http://www.vitavoom.com/ e http://sourceforge.net/projects/zeoslib/. 2009/8/17 Adriano Espinoza de Oliveira adrianoespin...@gmail.com Bom dia a todos.Pessoal, estou usando Delphi com dbExpress e driver para o postgres da Devart. O problema é que não estou encontrando outro driver p/ utilizar na aplicação e o driver atual é Trial por 30 dias. Alguem tem alguma dica? Agradeço antecipadamente. Adriano ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral []s -- JotaComm http://jotacomm.wordpress.com http://www.dextra.com.br/postgres ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Dbexpress X Postgres
Tem um Driver do Thiago Borges em www.thborges.com, que é demo, não sei te falar se tem algum FREE. 2009/8/17 Adriano Espinoza de Oliveira adrianoespin...@gmail.com Bom dia a todos.Pessoal, estou usando Delphi com dbExpress e driver para o postgres da Devart. O problema é que não estou encontrando outro driver p/ utilizar na aplicação e o driver atual é Trial por 30 dias. Alguem tem alguma dica? Agradeço antecipadamente. Adriano ___ 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
[pgbr-geral] Select com paginacao
Galera, bom dia. Seguinte estou precisando fazer um select em uma base de produtos onde vou encontrar as curvas de vendas dos produtos, ou seja, tenho um select que me retorna 100 itens quero que para os 25% que listarem primeiro me mostre A, para os próximos 25% mostre B e na sequencia C e D. Pensei em fazer manualmente utilizando algum tipo de paginação, tipo, faço um select com limit 25 por exemplo (essa conta vou ter que fazer na mão) e tipo em um outro select listo mais 25 mas mostrando a partir do 26. Existe como fazer isso? Obrigado! ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Res: Select com paginacao
SELECT + LIMIT + OFFSET De: Thiago zan...@farmaponte.com.br Para: pgbr-geral@listas.postgresql.org.br Enviadas: Segunda-feira, 17 de Agosto de 2009 11:58:39 Assunto: [pgbr-geral] Select com paginacao Galera, bom dia. Seguinte estou precisando fazer um select em uma base de produtos onde vou encontrar as curvas de vendas dos produtos, ou seja, tenho um select que me retorna 100 itens quero que para os 25% que listarem primeiro me mostre A, para os próximos 25% mostre B e na sequencia C e D. Pensei em fazer manualmente utilizando algum tipo de paginação, tipo, faço um select com limit 25 por exemplo (essa conta vou ter que fazer na mão) e tipo em um outro select listo mais 25 mas mostrando a partir do 26. Existe como fazer isso? Obrigado! ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.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] Select com paginacao
LIMIT e OFF SET! 2009/8/17 Thiago zan...@farmaponte.com.br Galera, bom dia. Seguinte estou precisando fazer um select em uma base de produtos onde vou encontrar as curvas de vendas dos produtos, ou seja, tenho um select que me retorna 100 itens quero que para os 25% que listarem primeiro me mostre A, para os próximos 25% mostre B e na sequencia C e D. Pensei em fazer manualmente utilizando algum tipo de paginação, tipo, faço um select com limit 25 por exemplo (essa conta vou ter que fazer na mão) e tipo em um outro select listo mais 25 mas mostrando a partir do 26. Existe como fazer isso? Obrigado! ___ 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] Select com paginacao
/* Daê Thiago Abaixo uma possível solução para o seu problema, desenvolvida utilizando o padrão POG: */ -- Tabelinha de teste create table teste(id serial, descricao text, valor decimal(8,2)); -- View auxiliar para definir tipo de retorno da função (chuncho) create view teste_view as select *, null::char(1) from teste; -- Função pra popular a tabelinha teste (chuncho de teste) CREATE OR REPLACE FUNCTION public.popula_teste() RETURNS boolean AS $BODY$ DECLARE contador integer; BEGIN contador := 1; for contador in 0..200 loop insert into teste values(contador,'desc '||contador::varchar, contador*10::decimal); end loop; RETURN true; EXCEPTION WHEN OTHERS THEN END; $BODY$ LANGUAGE 'plpgsql' VOLATILE COST 100; -- Popula a tabelinha teste com a função (gambiarra básica... ) select popula_teste(); -- Cria função que retorna os 100 primeiros registros da tabela teste -- onde os 25 primeiros terão o atributo classe = A, os 25 seguintes = B, etc... CREATE OR REPLACE FUNCTION public.select_classific() RETURNS SETOF teste_view AS $BODY$ DECLARE contador smallint; classe char(1); registro teste_view%rowtype; BEGIN for contador in 0..3 loop classe := (case when contador = 0 then 'A' when contador = 1 then 'B' when contador = 2 then 'C' else 'D' end); for registro in select id, descricao,valor,classe from teste order by valor desc limit 25 offset 25*contador loop RETURN NEXT registro; end loop; end loop; RETURN; EXCEPTION WHEN OTHERS THEN END; $BODY$ LANGUAGE 'plpgsql'; -- Utilização da função select * from public.select_classific() ; -- :p /* Apesar de ser uma solução POG, utilizo coisa semelhante aqui na nossa empresa e tem funcionado bem... Abrç Chiqueti */ 2009/8/17 Thiago zan...@farmaponte.com.br: Galera, bom dia. Seguinte estou precisando fazer um select em uma base de produtos onde vou encontrar as curvas de vendas dos produtos, ou seja, tenho um select que me retorna 100 itens quero que para os 25% que listarem primeiro me mostre A, para os próximos 25% mostre B e na sequencia C e D. Pensei em fazer manualmente utilizando algum tipo de paginação, tipo, faço um select com limit 25 por exemplo (essa conta vou ter que fazer na mão) e tipo em um outro select listo mais 25 mas mostrando a partir do 26. Existe como fazer isso? Obrigado! ___ 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] Select com paginacao
Olá, Thiago Você pode usar o SELECT com LIMIT e OFFSET ou derrepente fazer o uso de cursores também. 2009/8/17 Thiago zan...@farmaponte.com.br Galera, bom dia. Seguinte estou precisando fazer um select em uma base de produtos onde vou encontrar as curvas de vendas dos produtos, ou seja, tenho um select que me retorna 100 itens quero que para os 25% que listarem primeiro me mostre A, para os próximos 25% mostre B e na sequencia C e D. Pensei em fazer manualmente utilizando algum tipo de paginação, tipo, faço um select com limit 25 por exemplo (essa conta vou ter que fazer na mão) e tipo em um outro select listo mais 25 mas mostrando a partir do 26. Existe como fazer isso? Obrigado! ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral []s -- JotaComm http://jotacomm.wordpress.com http://www.dextra.com.br/postgres ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Select com paginacao
2009/8/17 JotaComm jota.c...@gmail.com Olá, Thiago Você pode usar o SELECT com LIMIT e OFFSET ou derrepente fazer o uso de cursores também. Só para exemplificar o que o Jota comentou você poderia fazer algo do tipo: postg...@bdteste=# create table foo(codigo serial, nome varchar) ; NOTICE: CREATE TABLE will create implicit sequence foo_codigo_seq for serial column foo.codigo CREATE TABLE postg...@bdteste=# insert into foo (nome) select 'Nome '||id from generate_series(1, 100) as id; INSERT 0 100 postg...@bdteste=# create temp sequence rownumber ; CREATE SEQUENCE postg...@bdteste=# create temp table tmp_foo as select foo.*, chr(cast(65 + ( (nextval('rownumber')-1) / 25) as integer)) as letra from foo; SELECT Dessa forma criei uma tabela temporária chamada tmp_foo com os dados necessários, dai para você verificar o resultado basta executar os seguintes SELECTs: select * from tmp_foo offset 0 limit 25; select * from tmp_foo offset 25 limit 25; select * from tmp_foo offset 50 limit 25; select * from tmp_foo offset 75 limit 25; Lembre-se que é apenas um exemplo, não levei em conta a quantidade de linhas que irá retornar, tanto é que usei uma tabela temporária e dependendo do volume de dados pode se tornar proibitivo... Também poderias mesclar a query que enviei com a numeração a solução enviada pelo Fabiano (uma pl), dai voce poderá obter uma função mais genérica para uso desse recurso. Outro detalhe seria quanto ao identificado da página (A, B, C, D, ...) e quando acabar o alfabeto?? o que deve ser feito??? tens de pensar nisso também... -- Fabrízio de Royes Mello Blog sobre PostgreSQL: http://fabriziomello.blogspot.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] Dbexpress X Postgres
use ZEos - Original Message - From: Mozart Hasse mozart.ha...@usa.net To: pgbr-geral@listas.postgresql.org.br Sent: Monday, August 17, 2009 12:43 PM Subject: Re: [pgbr-geral] Dbexpress X Postgres Adriano, Bom dia a todos.Pessoal, estou usando Delphi com dbExpress e driver para o postgres da Devart. O problema é que não estou encontrando outro driver p/ utilizar na aplicação e o driver atual é Trial por 30 dias. Alguem tem alguma dica? Eu me conecto ao Postgres à partir do Delphi usando qualquer coisa que fale com o Driver ODBC dele. Os 3 que eu uso são: - BDE (sim, é uma m...) - ADO com Provider=MSDASQL - DBExpress com o driver OpenSource http://sourceforge.net/projects/open-dbexpress/ Não sei para quê ficar sofrendo com DevArt e afins se existe solução equivalente gratuita e com código fonte... Há quem diga que é 'horrível' não ter um driver com acesso mais 'nativo' (sem ODBC), mas até agora nunca consegui medir, nunca ouvi falar nem consigo imaginar aplicação que tenha essa diferença de desempenho como gargalo. 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] Select com paginacao
Fabrízio de Royes Mello escreveu: Outro detalhe seria quanto ao identificado da página (A, B, C, D, ...) e quando acabar o alfabeto?? o que deve ser feito??? tens de pensar nisso também... Então ... é que o quero fazer é por percentagem, não exatamente 25 itens, quero na verdade 25% do total de registros, dessa forma teria apenas A, B, C e D. Obrigado pela dica. Vou utilizar o offset e ver se funciona. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Select com paginacao
Valeu pela dica ... vou testar ... obrigado !!! Fabiano Chiqueti escreveu: /* Daê Thiago Abaixo uma possível solução para o seu problema, desenvolvida utilizando o padrão POG: */ -- Tabelinha de teste create table teste(id serial, descricao text, valor decimal(8,2)); -- View auxiliar para definir tipo de retorno da função (chuncho) create view teste_view as select *, null::char(1) from teste; -- Função pra popular a tabelinha teste (chuncho de teste) CREATE OR REPLACE FUNCTION public.popula_teste() RETURNS boolean AS $BODY$ DECLARE contador integer; BEGIN contador := 1; for contador in 0..200 loop insert into teste values(contador,'desc '||contador::varchar, contador*10::decimal); end loop; RETURN true; EXCEPTION WHEN OTHERS THEN END; $BODY$ LANGUAGE 'plpgsql' VOLATILE COST 100; -- Popula a tabelinha teste com a função (gambiarra básica... ) select popula_teste(); -- Cria função que retorna os 100 primeiros registros da tabela teste -- onde os 25 primeiros terão o atributo classe = A, os 25 seguintes = B, etc... CREATE OR REPLACE FUNCTION public.select_classific() RETURNS SETOF teste_view AS $BODY$ DECLARE contador smallint; classe char(1); registro teste_view%rowtype; BEGIN for contador in 0..3 loop classe := (case when contador = 0 then 'A' when contador = 1 then 'B' when contador = 2 then 'C' else 'D' end); for registro in select id, descricao,valor,classe from teste order by valor desc limit 25 offset 25*contador loop RETURN NEXT registro; end loop; end loop; RETURN; EXCEPTION WHEN OTHERS THEN END; $BODY$ LANGUAGE 'plpgsql'; -- Utilização da função select * from public.select_classific() ; -- :p /* Apesar de ser uma solução POG, utilizo coisa semelhante aqui na nossa empresa e tem funcionado bem... Abrç Chiqueti */ 2009/8/17 Thiago zan...@farmaponte.com.br: Galera, bom dia. Seguinte estou precisando fazer um select em uma base de produtos onde vou encontrar as curvas de vendas dos produtos, ou seja, tenho um select que me retorna 100 itens quero que para os 25% que listarem primeiro me mostre A, para os próximos 25% mostre B e na sequencia C e D. Pensei em fazer manualmente utilizando algum tipo de paginação, tipo, faço um select com limit 25 por exemplo (essa conta vou ter que fazer na mão) e tipo em um outro select listo mais 25 mas mostrando a partir do 26. Existe como fazer isso? Obrigado! ___ 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 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Ajuda com SQL union + limit + offset
Galera ... postar logo assim em seguida mas preciso disso com um pouco de urgência ... Sei que para usar union all com limit ou offset tenho que utilizar sub-query ... bem estou fazendo isso mas quando executo a query aparece o sequinte erro: ERROR: failed to find conversion function from unknown to text Esse é o comando SQL que estou tentando rodar: select tb_a.codigo,tb_a.qtde,tb_a.curva from (select codigo,qtde,'A' as curva from relatorio.tb_vendas order by codigo limit 10) as tb_a union all select tb_b.codigo,tb_b.qtde,tb_b.curva from (select codigo,qtde,'B' as curva from relatorio.tb_vendas order by codigo offset 11 limit 10) as tb_b Obrigado !!! ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Ajuda com SQL union + limit + offset
Boa tarde Thiago Seu problema são as constantes que definiu como 'A'...'B' as curva. Numa sub-consulta com limit e offset, fazendo union all o sgdb não sabe se a constante é do mesmo tipo em todas as sub-consultas, use o cast que resolve seu problema. select tb_a.codigo,tb_a.qtde,tb_a.curva from(select codigo,qtde, cast('A' as char(1)) as curva from relatorio.tb_vendas order by codigo limit 10) as tb_a union all select tb_b.codigo,tb_b.qtde,tb_b.curva from(select codigo,qtde, cast('B' as char(1)) as curva from relatorio.tb_vendas order by codigo offset 11 limit 10) as tb_b Att. Odizon 2009/8/17 Thiago zan...@farmaponte.com.br Galera ... postar logo assim em seguida mas preciso disso com um pouco de urgência ... Sei que para usar union all com limit ou offset tenho que utilizar sub-query ... bem estou fazendo isso mas quando executo a query aparece o sequinte erro: ERROR: failed to find conversion function from unknown to text Esse é o comando SQL que estou tentando rodar: select tb_a.codigo,tb_a.qtde,tb_a.curva from (select codigo,qtde,'A' as curva from relatorio.tb_vendas order by codigo limit 10) as tb_a union all select tb_b.codigo,tb_b.qtde,tb_b.curva from (select codigo,qtde,'B' as curva from relatorio.tb_vendas order by codigo offset 11 limit 10) as tb_b Obrigado !!! ___ 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
[pgbr-geral] pg_dump - pg_restore
Boa tarde! Estou tendo problemas ao fazer o backup de uma base de dados. O mesmo começou a ocorrer após a necessidade de restauração dos dados de um backup. Banco de dados: PostgreSQL 8.2.11 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2 (mingw-special) Sistema Operacional: Windows XP Professional SP2 - 2002 Após reinstalar o banco e antes de voltar o backup eu consigo fazer um backup (tar) do banco, porém após voltar o backup da o seguinte erro: pg_dump -v -Ft -D -h localhost auditor -U auditor -i c:\teste.tar pg_dump: [tar archiver] actual file length (246162) does not match expected (245760) pg_dump: *** aborted because of error Obs: Ao restaurar o banco de dados (backup) não ocorre nenhum erro/warnning. Obs2: O mesmo backup no servidor linux (CentOS) funcionou corretamente, fiz testes em três máquinas (Windows) e todas deram erro ao fazer o backup após ter sido restaurado o backup. Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.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] Ajuda com SQL union + limit + offset
Obrigado cara ... funcionou direitinho ... Valeu !!! Odizon escreveu: Boa tarde Thiago Seu problema são as constantes que definiu como 'A'...'B' as curva. Numa sub-consulta com limit e offset, fazendo union all o sgdb não sabe se a constante é do mesmo tipo em todas as sub-consultas, use o cast que resolve seu problema. select tb_a.codigo,tb_a.qtde,tb_a.curva from(select codigo,qtde, cast('A' as char(1)) as curva from relatorio.tb_vendas order by codigo limit 10) as tb_a union all select tb_b.codigo,tb_b.qtde,tb_b.curva from(select codigo,qtde, cast('B' as char(1)) as curva from relatorio.tb_vendas order by codigo offset 11 limit 10) as tb_b Att. Odizon 2009/8/17 Thiago zan...@farmaponte.com.br mailto:zan...@farmaponte.com.br Galera ... postar logo assim em seguida mas preciso disso com um pouco de urgência ... Sei que para usar union all com limit ou offset tenho que utilizar sub-query ... bem estou fazendo isso mas quando executo a query aparece o sequinte erro: ERROR: failed to find conversion function from unknown to text Esse é o comando SQL que estou tentando rodar: select tb_a.codigo,tb_a.qtde,tb_a.curva from (select codigo,qtde,'A' as curva from relatorio.tb_vendas order by codigo limit 10) as tb_a union all select tb_b.codigo,tb_b.qtde,tb_b.curva from (select codigo,qtde,'B' as curva from relatorio.tb_vendas order by codigo offset 11 limit 10) as tb_b Obrigado !!! ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br mailto: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 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral