[pgbr-geral] Postgresql 8.2.4 melhorá config uração - Lentidão exporádicas

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

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

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# min 64kB
maintenance_work_mem = 1024MB   # min 1MB
max_fsm_pages = 204800  # min max_fsm_relations*16, 6 bytes
each
vacuum_cost_delay = 100 # 0-1000 milliseconds //GS 200
fsync = on  # turns forced synchronization on or
off
wal_sync_method = fsync # the default is the first option
full_page_writes = on   # recover from partial page writes
wal_buffers = 128kB # min 32kB
commit_delay = 500  # range 0-10, in microseconds
//GS 1000
commit_siblings = 5 # range 1-1000
checkpoint_segments = 32# in logfile segments, min 1, 16MB
each //GS 8
checkpoint_timeout = 5min   # range 30s-1h
checkpoint_warning = 30s# 0 is off

enable_bitmapscan = on
enable_hashagg = on
enable_hashjoin = on
enable_indexscan = on
enable_mergejoin = on
enable_nestloop = on
enable_seqscan = on
enable_sort = on
enable_tidscan = on

random_page_cost = 2.0  # same scale as above //GS 1 - antes
4.0
effective_cache_size = 2GB
stats_command_string = on
update_process_title = on
stats_start_collector = on  # needed for block or row stats
stats_block_level = off
stats_row_level = on
autovacuum = off# enable autovacuum subprocess?
deadlock_timeout = 1s
max_locks_per_transaction = 64  # min 10

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


[pgbr-geral] Novato no grupo

2009-08-13 Por tôpico Marcelo Carvalho
Pessoal,Eu sempre usei Firebird, como bd em minhas aplicações, mas a coisa
ta ficando complicada em um cliente que tem muitos usuarios e uma base de
quase 500mb.
O que eu preciso instalar no servidor windows e nos clients ???
Para rodar o Postgresql ???

-- 

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


Re: [pgbr-geral] Novato no grupo

2009-08-13 Por tôpico Osvaldo Kussama
2009/8/13 Marcelo Carvalho marcelo...@gmail.com:
 Pessoal,
 Eu sempre usei Firebird, como bd em minhas aplicações, mas a coisa ta
 ficando complicada em um cliente que tem muitos usuarios e uma base de quase
 500mb.
 O que eu preciso instalar no servidor windows e nos clients ???
 Para rodar o Postgresql ???

No servidor: o servidor de bd PostgreSQL
Nos clientes: sua aplicação

Você também tem que decidir como sua aplicação se comunicará com o
gerenciador de banco de dados: OBC, JDBC, dbExpress, etc

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


Re: [pgbr-geral] Novato no grupo

2009-08-13 Por tôpico Roberto Mello
2009/8/13 Marcelo Carvalho marcelo...@gmail.com:
 Pessoal,
 Eu sempre usei Firebird, como bd em minhas aplicações, mas a coisa ta
 ficando complicada em um cliente que tem muitos usuarios e uma base de quase
 500mb.
 O que eu preciso instalar no servidor windows e nos clients ???
 Para rodar o Postgresql ???

Servidor: O programa completo do PostgreSQL, conforme indicado na documentação.
Clientes: As bibliotecas de acesso, e drivers necessários conforme sua
linguagem e S.O.

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


[pgbr-geral] Uso de índices

2009-08-13 Por tôpico Tiago Adami
Tenho uma tabela de cadastro de produtos com mais de 20 índices. Qualquer
consulta nesta tabela é muito rápida, não importa o que for feito.
Entretanto, eu tenho dúvidas quanto ao uso de todos os índices da tabela.

Como eu poderia verificar quais os índices mais utilizados ou então quais os
não utilizados? Através dos logs do banco?

-- 
Tiago J. Adami
Dois Vizinhos - Paraná - Brasil
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Uso de índices

2009-08-13 Por tôpico Fabrízio de Royes Mello
2009/8/13 Tiago Adami adam...@gmail.com

 Tenho uma tabela de cadastro de produtos com mais de 20 índices. Qualquer
 consulta nesta tabela é muito rápida, não importa o que for feito.
 Entretanto, eu tenho dúvidas quanto ao uso de todos os índices da tabela.

 Como eu poderia verificar quais os índices mais utilizados ou então quais
 os não utilizados? Através dos logs do banco?


Essas informações você obtém das views de estatísticas do PostgreSQL [1],
veja esse pequeno exemplo:

postg...@bage_20090811_v2_2_3=# select * from pg_stat_user_indexes where
relname = 'arrecad';
   relid   | indexrelid | schemaname | relname |
indexrelname   | idx_scan | idx_tup_read | idx_tup_fetch
---+++-+-+--+--+---
 233423297 |  484768250 | public | arrecad |
arrecad_numcgm_in   |0 |0 | 0
 233423297 |  484768251 | public | arrecad |
arrecad_numpre_in   |75521 |   433905 |432747
 233423297 |  484768252 | public | arrecad |
arrecad_numpre_numpar_in| 3312 | 5816 |  4476
 233423297 |  484768253 | public | arrecad |
arrecad_numpre_numpar_receit_in |   443104 | 4273 |  2586
 233423297 |  484768254 | public | arrecad |
arrecad_tipo|   12 | 11023441 | 0
(5 rows)


Nesse exemplo tenho a tabela chamada arrecad onde a mesma possui os
indices conforme listado em indexrelname e essa view lista o uso de cada
um dos meus índices.


[1] http://www.postgresql.org/docs/8.4/interactive/monitoring-stats.html


Cordialmente,
-- 
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] Uso de índices

2009-08-13 Por tôpico Charly Frankl
Tiago, boa tarde...

Apesar de não ser o que perguntou, quero apenas colocar um ponto importante
com relação a criação de indices.

Todas as vezes que criamos um índice novo em uma entidade, estamos impondo
um custo de atualização ao Banco. Pois quando um registro é atualizado
(insert/update/delete) os índices também são atualizados. Logo, se você tem
uma entidade com muita concorrência transacional, o custo pode ser alto, e o
tempo de resposta para atualizações na entidade aumentar consideravelmente.

Portanto, a questão de criar ou não índices deve ser vista com muito
cuidado, principalmente em entidades que tem uma carga transacional alta.

As vezes vale a pena criar um índice temporariamente para uma
consulta/relatório específico, e depois de ser realizado o mesmo remover o
índice.


Att,



-- 
Charly Frankl
http://javadevilopers.blogspot.com/
charlyfra...@gmail.com
Linux user #391083




2009/8/13 Tiago Adami adam...@gmail.com

 Tenho uma tabela de cadastro de produtos com mais de 20 índices. Qualquer
 consulta nesta tabela é muito rápida, não importa o que for feito.
 Entretanto, eu tenho dúvidas quanto ao uso de todos os índices da tabela.

 Como eu poderia verificar quais os índices mais utilizados ou então quais
 os não utilizados? Através dos logs do banco?

 --
 Tiago J. Adami
 Dois Vizinhos - Paraná - Brasil


 ___
 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] Res: Uso de índices

2009-08-13 Por tôpico paulo matadr
Olha,
Da pra fazer assim:
select schemaname||'.'||relname as Tabela, indexrelname as NomeIndice, idx_scan 
as TotalUtilizado,
idx_tup_read as NumLinhas, idx_tup_fetch as LidasComSucesso
from   pg_stat_user_indexes
order by schemaname, relname, indexrelname;
onde se o total utilizado fosse zero,mostra os n utilizados
interessante seria vc resertar as statisticas e acompanhar por  periodo o 
comportamento dos seus indices.






De: Tiago Adami adam...@gmail.com
Para: Comunidade PostgreSQL Brasileira pgbr-geral@listas.postgresql.org.br
Enviadas: Quinta-feira, 13 de Agosto de 2009 13:55:27
Assunto: [pgbr-geral] Uso de índices

Tenho uma tabela de cadastro de produtos com mais de 20 índices. Qualquer 
consulta nesta tabela é muito rápida, não importa o que for feito. Entretanto, 
eu tenho dúvidas quanto ao uso de todos os índices da tabela.

Como eu poderia verificar quais os índices mais utilizados ou então quais os 
não utilizados? Através dos logs do banco?

-- 
Tiago J. Adami
Dois Vizinhos - Paraná - Brasil


  

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] Interpretação do explain analyse

2009-08-13 Por tôpico Nei Rauni Santos
Oi Hasse,

Obrigado pela sua explicação, vou testar isso aqui, existe alguma outra
possibilidade sem criar as tmp tables??



2009/8/13 Mozart Hasse mozart.ha...@usa.net

 Olá Rauni,

 Um jeito de ensinar SQL para o otimizador do Postgres é o seguinte:

 create index tmp2 on hotel_description_translation (id,lang);

 create temporary table x as
 select d.description_type_id, t.lang, count( t.id ) as count
 from hotel_description_translation as t
 group by t.id, t.lang;

 select d.description_type_id,t.lang
 from x t
 inner join hotel_description_translation d ON ( d.id = t.id );

 Ou seja: crie uma tabela temporária contendo as totalizações, usando apenas
 a tabela filha.
 Essa consulta será simples o suficiente para o otimizador do Postgres usar
 o
 índice e montar os totais rapidamente (a consulta completa pelo visto é
 complicada demais para ele...).
 Depois, sobre uma tabela muito menor, mesmo sem usar índices, o Hash Join
 do
 Postgres vai ter um desempenho mais aceitável.

 Não tenho tuas tabelas, mas com duas minhas de volume e proporção similares
 a resposta foi 5 vezes mais rápida.

 Atenciosamente,

 Mozart Hasse


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




-- 
Nei Rauni Santos
nra...@gmail.com
+55 41 85020985
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Res: Uso de índices

2009-08-13 Por tôpico Tiago Adami
Em relação ao que o Charly disse, temos consciência do impacto dos índices
sobre o banco, especialmente porque usamos o PostgreSQL somente como banco
OLTP - no momento estamos fazendo uma reengenharia do modelo físico para
melhorar seu desempenho. Mas valeu por lembrar!

Conforme o Paulo respondeu, verifiquei a documentação do link enviado pelo
Fabrízio. Para zerar as estatísticas basta o comando pg_stat_reset()?

Obrigado a todos pelas respostas.

-- 
Tiago J. Adami
Dois Vizinhos - Paraná - Brasil


2009/8/13 paulo matadr saddon...@yahoo.com.br

 Olha,
 Da pra fazer assim:
 select schemaname||'.'||relname as Tabela, indexrelname as NomeIndice,
 idx_scan as TotalUtilizado,
 idx_tup_read as NumLinhas, idx_tup_fetch as LidasComSucesso
 from   pg_stat_user_indexes
 order by schemaname, relname, indexrelname;
 onde se o total utilizado fosse zero,mostra os n utilizados
 interessante seria vc resertar as statisticas e acompanhar por  periodo o
 comportamento dos seus indices.


 --
 *De:* Tiago Adami adam...@gmail.com
 *Para:* Comunidade PostgreSQL Brasileira 
 pgbr-geral@listas.postgresql.org.br
 *Enviadas:* Quinta-feira, 13 de Agosto de 2009 13:55:27
 *Assunto:* [pgbr-geral] Uso de índices

 Tenho uma tabela de cadastro de produtos com mais de 20 índices. Qualquer
 consulta nesta tabela é muito rápida, não importa o que for feito.
 Entretanto, eu tenho dúvidas quanto ao uso de todos os índices da tabela.

 Como eu poderia verificar quais os índices mais utilizados ou então quais
 os não utilizados? Através dos logs do banco?

 --
 Tiago J. Adami
 Dois Vizinhos - Paraná - Brasil


 --
 Veja quais são os assuntos do momento no Yahoo! + Buscados: Top 
 10http://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/-
 Celebridadeshttp://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/celebridades/-
 Músicahttp://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/m%C3%BAsica/-
 Esporteshttp://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/esportes/

 ___
 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] Uso de índices

2009-08-13 Por tôpico Euler Taveira de Oliveira
Charly Frankl escreveu:
 Pois quando um registro é
 atualizado (insert/update/delete) os índices também são atualizados.
 
Vale lembrar que (em uma versão 8.3 ou superior) para o comando UPDATE, isso
nem sempre é verdade. O _HOT_ (Heap Only Tuples) foi introduzido justamente
para *não* ter que atualizar o índice caso as colunas modificadas não estejam
presentes em índices.


-- 
  Euler Taveira de Oliveira
  http://www.timbira.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] Uso de índices

2009-08-13 Por tôpico JotaComm
Olá, Tiago

Você pode executar o segundo SQL para obter esta informação:

SELECT indexrelname,idx_scan
FROM pg_stat_user_indexes
WHERE relname='nome_da_tabela'
AND idx_scan=0;

Com idx_scan=0 você identifica os índices não utilizados e com idx_scan!=0
você identifica os índices utilizados e quantas vezes o índice foi
utilizado.

2009/8/13 Tiago Adami adam...@gmail.com

 Tenho uma tabela de cadastro de produtos com mais de 20 índices. Qualquer
 consulta nesta tabela é muito rápida, não importa o que for feito.
 Entretanto, eu tenho dúvidas quanto ao uso de todos os índices da tabela.

 Como eu poderia verificar quais os índices mais utilizados ou então quais
 os não utilizados? Através dos logs do banco?

 --
 Tiago J. Adami
 Dois Vizinhos - Paraná - Brasil


 ___
 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] Res: Uso de índices

2009-08-13 Por tôpico JotaComm
Olá, Tiago

Sim, a função pg_stat_reset() reinicia as estatísticas.


2009/8/13 Tiago Adami adam...@gmail.com

 Em relação ao que o Charly disse, temos consciência do impacto dos índices
 sobre o banco, especialmente porque usamos o PostgreSQL somente como banco
 OLTP - no momento estamos fazendo uma reengenharia do modelo físico para
 melhorar seu desempenho. Mas valeu por lembrar!

 Conforme o Paulo respondeu, verifiquei a documentação do link enviado pelo
 Fabrízio. Para zerar as estatísticas basta o comando pg_stat_reset()?

 Obrigado a todos pelas respostas.

 --
 Tiago J. Adami
 Dois Vizinhos - Paraná - Brasil


 2009/8/13 paulo matadr saddon...@yahoo.com.br

 Olha,
 Da pra fazer assim:
 select schemaname||'.'||relname as Tabela, indexrelname as NomeIndice,
 idx_scan as TotalUtilizado,
 idx_tup_read as NumLinhas, idx_tup_fetch as LidasComSucesso
 from   pg_stat_user_indexes
 order by schemaname, relname, indexrelname;
 onde se o total utilizado fosse zero,mostra os n utilizados
 interessante seria vc resertar as statisticas e acompanhar por  periodo o
 comportamento dos seus indices.


 --
 *De:* Tiago Adami adam...@gmail.com
 *Para:* Comunidade PostgreSQL Brasileira 
 pgbr-geral@listas.postgresql.org.br
 *Enviadas:* Quinta-feira, 13 de Agosto de 2009 13:55:27
 *Assunto:* [pgbr-geral] Uso de índices

 Tenho uma tabela de cadastro de produtos com mais de 20 índices. Qualquer
 consulta nesta tabela é muito rápida, não importa o que for feito.
 Entretanto, eu tenho dúvidas quanto ao uso de todos os índices da tabela.

 Como eu poderia verificar quais os índices mais utilizados ou então quais
 os não utilizados? Através dos logs do banco?

 --
 Tiago J. Adami
 Dois Vizinhos - Paraná - Brasil


 --
 Veja quais são os assuntos do momento no Yahoo! + Buscados: Top 
 10http://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/-
 Celebridadeshttp://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/celebridades/-
 Músicahttp://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/m%C3%BAsica/-
 Esporteshttp://br.rd.yahoo.com/mail/taglines/mail/*http://br.maisbuscados.yahoo.com/esportes/

 ___
 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



[]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] Uso de índices

2009-08-13 Por tôpico Charly Frankl
Sim... Bem lembrado!

Mas como havia falado com relação ao uso indiscriminado, existe a grande
possibilidade de um atributo que está sendo atualizado contemplar um índice
criado desnecessariamente.

O tema índice é muito interessante, e geralmente levanta muitas dúvidas e
polêmicas. E como já discutido anteriormente, não existe uma fórmula mágica
para o uso de índice. O sistema (estatísticas) vai dizer se precisa ou não.
Aplicações com demandas altas de operações transacionais, principalmente
inserções e inclusões, costumam (volto a ressaltar, não é regra) demandar
uma quantidade menor de índices.

Não é raro a situação onde uma entidade muito grande retorna uma consulta
com um tempo pequeno, e uma exclusão utilizando os mesmos parâmetros
demandam muito tempo para ser realizada em virtude do custo para atualização
nas tabelas de índices associadas.

Todavia, existem situações diferentes, onde a carga transacional não é tão
relevante, mas demanda uma quantidade muito grande de operações de consulta.
Nesses casos, obviamente índices bem planejados vão reduzir em muito o custo
do banco. E índices bem planejados também incluem utilizar os algoritmos
corretos para as classes de operadores corretas...

Enfim... O assunto é vasto, e muito interessante, espero termos
oportunidades de discutirmos com mais propriedade depois.

Um grande abraço a todos!


-- 
Charly Frankl
http://javadevilopers.blogspot.com/
charlyfra...@gmail.com
Linux user #391083



2009/8/13 Euler Taveira de Oliveira eu...@timbira.com

 Charly Frankl escreveu:
  Pois quando um registro é
  atualizado (insert/update/delete) os índices também são atualizados.
 
 Vale lembrar que (em uma versão 8.3 ou superior) para o comando UPDATE,
 isso
 nem sempre é verdade. O _HOT_ (Heap Only Tuples) foi introduzido justamente
 para *não* ter que atualizar o índice caso as colunas modificadas não
 estejam
 presentes em índices.


 --
  Euler Taveira de Oliveira
  http://www.timbira.com/
 ___
 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] Valor do campo no Before Insert

2009-08-13 Por tôpico Nilson Chagas
Pessoal,

Não sou dba, e estou apenas gatinhando no postgresql.

Preciso de uma trigger no before insert da tabela (ou talvez alguém
tenha até uma outra solução).

Estou tentando algo assim:

CREATE OR REPLACE FUNCTION fc_perfil_usuario()
  RETURNS trigger AS
$BODY$begin

-- verifica se o campo per_id é nulo
IF NEW.per_id IS NULL THEN
-- busca o id na tabela perfil
SELECT per_id into perfil FROM perfil where per_descr = 
'Usuário';
END IF;

   -- campo per_id da tabela usuário
NEW.per_id := perfil;


RETURN NEW;

end$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
COMMENT ON FUNCTION fc_perfil_usuario() IS 'Se o campo perfil do
usuario estiver nulo a função busca o id da descrição usuario';


Qual é a maneira correta de se fazer isto??

-- 
[]s
Nilson Chagas - Ubuntu User 25794
---
Visite:
http://www.avozdoevangelho.com.br - Peça gratuitamente um curso Bíblico
Twitter: avozdoevangelho
http://www.amados.com.br
http://bbnradio.org - Ouça a rádio e faça gratuitamente um Curso
Biblico On-Line
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Interpretação do explain analyse

2009-08-13 Por tôpico JotaComm
Olá,

Você tem as estatísticas do seu banco atualizadas, isto é, o comando ANALYZE
é executado com qual periodicidade?

Esta sua tabela tem muitas operações de UPDATE e DELETE? De quanto em quanto
tempo você executa um processo de VACUUM? O autovacuum está habilitado?

2009/8/12 Nei Rauni Santos nra...@gmail.com

 Dae pessoal, tenho uma consulta entre 2 tabelas que está demorando bastante
 tempo, gostaria da ajuda de alguém para analisar o resultado do explain
 analize.

 minha query:

 select d.description_type_id, t.lang, count( t.id ) from hotel_description
 as d
 inner join hotel_description_translation as t ON ( d.id = t.id )
 group by d.description_type_id, t.lang

 o pgadmin3 diz que demora 14714 ms para executar essa query, o resultado
 dela é esse:

 4;pt_BR;12183
 3;pt;13326
 8;pt_BR;58957
 5;en;27687
 7;en;20041
 11;en;61
 6;pt;24534
 2;pt_BR;11559
 1;pt_BR;10024
 3;en;33032
 6;en;59706
 7;pt;10176
 11;pt;29
 5;pt;4061
 4;en;28612
 8;en;59726
 2;pt;11559
 1;pt;10024
 5;pt_BR;4061
 7;pt_BR;10176
 11;pt_BR;29
 1;en;23219
 2;en;26297
 8;pt;58957
 3;pt_BR;13326
 4;pt;12183
 6;pt_BR;24534


 estrutura das minhas tabelas:

 CREATE TABLE hotel_description_translation
 (
   id integer NOT NULL,
   lang character varying(5) NOT NULL,
   created_at timestamp without time zone,
   updated_at timestamp without time zone,
   description text NOT NULL,
   CONSTRAINT pkhotel_description_i18n PRIMARY KEY (id, lang),
   CONSTRAINT fk_hotel_description_i18n_hotel_description FOREIGN KEY (id)
   REFERENCES hotel_description (id) MATCH SIMPLE
   ON UPDATE NO ACTION ON DELETE NO ACTION
 )
 WITH (OIDS=FALSE);

 CREATE TABLE hotel_description
 (
   description_type_id integer NOT NULL,
   hotel_id integer NOT NULL,
   id serial NOT NULL,
   CONSTRAINT pkhotel_description PRIMARY KEY (id))
 WITH (OIDS=FALSE);


 quantidade de registros

 select count(*) from hotel_description; --327819 rows
 select count(*) from hotel_description_translation; --568079 rows


 o explain analyse resultou nisso:


 HashAggregate  (cost=88792.79..88793.09 rows=24 width=11)
   -  Hash Join  (cost=10263.93..84532.20 rows=568079 width=11)
 Hash Cond: (t.id = d.id)
 -  Seq Scan on hotel_description_translation t
 (cost=0.00..57895.79 rows=568079 width=7)
 -  Hash  (cost=4885.19..4885.19 rows=327819 width=8)
   -  Seq Scan on hotel_description d  (cost=0.00..4885.19
 rows=327819 width=8)





 se alguém puder ajudar, não sei se é possível otimizar um pouco mais isso.

 Nei




 --
 Nei Rauni Santos
 nra...@gmail.com
 +55 41 85020985

 ___
 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] Valor do campo no Before Insert

2009-08-13 Por tôpico JotaComm
Olá, Nilson

Fiquei um pouco confuso. Você poderia discorrer um pouco mais sobre qual o
seu objetivo com esta função?

2009/8/13 Nilson Chagas nilson.chagas.si...@gmail.com

 Pessoal,

 Não sou dba, e estou apenas gatinhando no postgresql.

 Preciso de uma trigger no before insert da tabela (ou talvez alguém
 tenha até uma outra solução).

 Estou tentando algo assim:

 CREATE OR REPLACE FUNCTION fc_perfil_usuario()
  RETURNS trigger AS
 $BODY$begin

-- verifica se o campo per_id é nulo
IF NEW.per_id IS NULL THEN
-- busca o id na tabela perfil
SELECT per_id into perfil FROM perfil where per_descr =
 'Usuário';
END IF;

   -- campo per_id da tabela usuário
NEW.per_id := perfil;


 RETURN NEW;

 end$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
 COMMENT ON FUNCTION fc_perfil_usuario() IS 'Se o campo perfil do
 usuario estiver nulo a função busca o id da descrição usuario';


 Qual é a maneira correta de se fazer isto??

 --
 []s
 Nilson Chagas - Ubuntu User 25794
 ---
 Visite:
 http://www.avozdoevangelho.com.br - Peça gratuitamente um curso Bíblico
 Twitter: avozdoevangelho
 http://www.amados.com.br
 http://bbnradio.org - Ouça a rádio e faça gratuitamente um Curso
 Biblico On-Line
 ___
 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] Valor do campo no Before Insert

2009-08-13 Por tôpico Fabrízio de Royes Mello
2009/8/13 Nilson Chagas nilson.chagas.si...@gmail.com

 Pessoal,

 Não sou dba, e estou apenas gatinhando no postgresql.

 Preciso de uma trigger no before insert da tabela (ou talvez alguém
 tenha até uma outra solução).

 Estou tentando algo assim:

 CREATE OR REPLACE FUNCTION fc_perfil_usuario()
  RETURNS trigger AS
 $BODY$begin

-- verifica se o campo per_id é nulo
IF NEW.per_id IS NULL THEN
-- busca o id na tabela perfil
SELECT per_id into perfil FROM perfil where per_descr =
 'Usuário';
END IF;

   -- campo per_id da tabela usuário
NEW.per_id := perfil;


 RETURN NEW;

 end$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
 COMMENT ON FUNCTION fc_perfil_usuario() IS 'Se o campo perfil do
 usuario estiver nulo a função busca o id da descrição usuario';


 Qual é a maneira correta de se fazer isto??



Não seria mais adequado algo do tipo:

CREATE OR REPLACE FUNCTION fc_perfil_usuario()  RETURNS trigger AS
$BODY$
DECLARE
  iPerfil integer;
BEGIN

  -- verifica se o campo per_id é nulo
  IF NEW.per_id IS NULL THEN
-- busca o id na tabela perfil
SELECT per_id INTO iPerfil FROM perfil WHERE per_descr = 'Usuário';

-- campo per_id da tabela usuário
NEW.per_id := iPerfil;
  END IF;

  RETURN NEW;

END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;

Cordialmente,
-- 
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