[pgbr-geral] RES: Postgresql 8.2.4 melhor á configuração - Lentidão esporádicas

2009-08-17 Por tôpico Gutemberg Sarlo - Hotmail
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

2009-08-17 Por tôpico JotaComm
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

2009-08-17 Por tôpico Jeanderson Machado
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

2009-08-17 Por tôpico Aldemir Vieira
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

2009-08-17 Por tôpico JotaComm
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

2009-08-17 Por tôpico izaque Maciel
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

2009-08-17 Por tôpico Thiago
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

2009-08-17 Por tôpico Nelson Gonzaga
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

2009-08-17 Por tôpico Rafael Garbin
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

2009-08-17 Por tôpico Fabiano Chiqueti
/*
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

2009-08-17 Por tôpico JotaComm
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-08-17 Por tôpico Fabrízio de Royes Mello
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

2009-08-17 Por tôpico George
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

2009-08-17 Por tôpico Thiago
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

2009-08-17 Por tôpico Thiago
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

2009-08-17 Por tôpico Thiago
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

2009-08-17 Por tôpico Odizon
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

2009-08-17 Por tôpico Marcos Bernardelli
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

2009-08-17 Por tôpico Thiago
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