[pgbr-geral] Postgresql 8.2.4 melhorá config uração - Lentidão exporádicas
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
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/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/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
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/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
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
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
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
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
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
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
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
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
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
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
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/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