[pgbr-geral] OFF-TOPIC - Executar pg_dump parametrizado por data a partir de um shell-script
Olá comunidade, peço ajuda pra quem trabalha com Postgres em ambiente Linux e que também escreve Shell-scripts. Preciso fazer uma rotina de backup de uma base em Postgresql 8.2.4. Existem centenas de tabelas na base; todas as tabelas estão no formato bhXXX_h__MM_DD, onde XXX é o rótulo de um tipo de tabela e _MM_DD refere-se à data de criação da tabela. Eis exemplos: bheqp_h_2009_01_09, bhmul_h_2009_01_09 , bhpas_h_2009_01_09, bhpds_h_2009_01_09, etc. Fiz uma cópia de dados de uma tabela do servidor através do pgAdmin e obtive o seguinte comando: pg_dump.exe --host 10.98.0.83 --port 5432 --username sage --format plain --data-only --verbose --file C:\teste.sql --table \public\.\bheqp_h_2009_01_09\ bhcolsl_ems_sage Preciso fazer um programa/script para rodar , que o usuário entre com a data inicial e final e execute o comando acima de acordo com os parâmetros das datas; O arquivo gerado tem que ter o mesmo nome da tabela copiada. Seria algo assim como o pseudo-codigo abaixo: --- ./copy_tabelas 2010-01-01 2010-01-31 --- tipos_tabelas[] = { 'mul', 'eqp', 'pas', 'pds', 'lia' }; For (i=0; i tipos_tabelas.lenght; i++) { data_aux = data_inicial; While (data_aux = data_final) { Nome_arquivo = data_aux || '.dados'; EXCUTAR pg_dump.exe --host 10.98.0.83 --port 5432 --username sage --format plain --data-only --verbose --file Nome_arquivo --table \public\.\bheqp_h_data_aux\ bhcolsl_ems_sage data_aux = data_aux + 1; } } Eu gostaria de saber como fazer isso em Shell-script. Se alguém puder dar um help. Desde já agradeço. Att. NEWTON TEIXEIRA DO N. JR. ANALISTA DE SISTEMAS Aviso: O emitente desta mensagem é responsável por seu conteúdo e endereçamento. Cabe ao destinatário cuidar quanto ao tratamento adequado. Sem a devida autorização, a divulgação, a reprodução, a distribuição ou qualquer outra ação em desconformidade com as normas internas da ELETRONORTE S/A são proibidas e passíveis de sanção disciplinar, cível e criminal. Esta mensagem pode ser monitorada. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Executar pg_dump a partir de um programa em VB.NET
Olá comunidade, preciso fazer uma rotina de backup de uma base em Postgresql 8.2.4 através de um programa VB.NET. Todas as tabelas estão no formato bhXXX_h__MM_DD, onde XXX é o rótulo de um tipo de tabela e _MM_DD refere-se à data de criação da tabela. Eis exemplos: bheqp_h_2009_01_09, bhmul_h_2009_01_09 , bhpas_h_2009_01_09, bhpds_h_2009_01_09, etc. Fiz uma cópia de dados de uma tabela do servidor através do pgAdmin e obtive o seguinte comando: C:\Arquivos de programas\pgAdmin III\1.10\pg_dump.exe --host 10.98.0.83 --port 5432 --username sage --format plain --data-only --verbose --file C:\teste.sql --table \public\.\bheqp_h_2009_01_09\ bhcolsl_ems_sage Preciso fazer um programa, que o usuario entre com a data inicial e final e selecione o tipos de tabelas que serão copiadas; exemplo - mul, eqp, pas, pds, lia, etc e execute o comando acima de acordo com os parâmetros das datas e dos nomes das tabelas. O que preciso é executar o pg_dump.exe através de um programa que vou criar em VB.NET Para fazer o COPY, em um loop que vai da data inicial exemplo: bhpas_h_2009_01_01 a bhpas_h_2009_01_31. Alguém sabe, já fez dessa forma e/ou tem alguma outra alternativa? Esse programa tem que ser executado a partir de minha máquina cliente e o arquivo de gerado tem que ser armazenado na mesma máquina. Estou no aguardo online. Att. NEWTON TEIXEIRA DO N. JR. Aviso: O emitente desta mensagem é responsável por seu conteúdo e endereçamento. Cabe ao destinatário cuidar quanto ao tratamento adequado. Sem a devida autorização, a divulgação, a reprodução, a distribuição ou qualquer outra ação em desconformidade com as normas internas da ELETRONORTE S/A são proibidas e passíveis de sanção disciplinar, cível e criminal. Esta mensagem pode ser monitorada. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Como inserir dados em vetores de forma otimizada [ plsql ] ?
Olá comunidade, tenho vários trechos de código em plsql que inserem valores em vetores da forma abaixo [SQL 01]: DECLARE vetor_hora_max varchar[] = '{null}'; vetor_cargas real[][] := '{{null,null,null,null,null}}'; i=1 FOR tupla IN (SELECT id_limites_tensoes_subest, id_tensoes_subest, id_carga, valor_inf, valor_recom, valor_sup FROM cmao.DTF_LIMITES_TENSOES_BARRA ) LOOP IF ( i = 1 ) THEN vetor_cargas[i][1] = tupla.id_limites_tensoes_subest; vetor_cargas[i][2] = tupla.id_carga; vetor_cargas[i][3] = tupla.valor_inf; vetor_cargas[i][4] = tupla.valor_recom; vetor_cargas[i][5] = tupla.valor_sup; ELSE vetor_cargas = vetor_cargas || ARRAY[[tupla.id_limites_tensoes_subest, tupla.id_carga,tupla.valor_inf, tupla.valor_recom, tupla.valor_sup]]; END IF;--*/ i = i+1; --vetor_cargas = vetor_cargas || ARRAY[[tupla.id_limites_tensoes_subest, tupla.id_carga,tupla.valor_inf, tupla.valor_recom, tupla.valor_sup]]; vetor_ids_limites_tensoes_subest = vetor_ids_limites_tensoes_subest || tupla.id_limites_tensoes_subest; END LOOP; Quando executo esse código, o vetor é preenchido corretamente. Exemplo: vetor_cargas - {{1,4,69.7,71,72.3},{2,3,68.7,70,71.3},{3,2,67.7,69,70.3},{4,1,67.7,69,70.3}}NOTICE: vetor_hora_max - {23:59:50} Gostaria de otimizar esse trecho de código para eliminar esse IF e ELSE - como abaixo [SQL 02]: FOR tupla IN (SELECT * FROM cmao.DTF_LIMITES_TENSOES_BARRA) LOOP vetor_cargas = vetor_cargas || ARRAY[[tupla.id_limites_tensoes_subest, tupla.id_carga,tupla.valor_inf, tupla.valor_recom, tupla.valor_sup]]; END LOOP; O problema é quando executo como o [SQL 02], o primeiro elemento do vetor sempre vem com NULL. Exemplo: FOR rIN (SELECT * FROM cmao.DTF_LIMITES_TENSOES_BARRA WHERE id_tensoes_subest = record_dtf.id_tensoes_subest ORDER BY id_tensoes_subest, id_limites_tensoes_subest) LOOP vetor_cargas = vetor_cargas || ARRAY[[tupla.id_limites_tensoes_subest, tupla.id_carga,tupla.valor_inf, tupla.valor_recom, tupla.valor_sup]]; END LOOP; RAISE NOTICE 'vetor_cargas - %',vetor_cargas; RAISE NOTICE 'vetor_hora_max - %',vetor_hora_max; vetor_cargas - {{NULL,NULL,NULL,NULL,NULL},{1,4,69.7,71,72.3},{2,3,68.7,70,71.3},{3,2,67.7,69,70.3},{4,1,67.7,69,70.3}}NOTICE: vetor_hora_max - {NULL,23:59:50} Esses vetores estão declarados da seguinte forma: vetor_hora_max varchar[] = '{null}'; vetor_cargas real[][] := '{{null,null,null,null,null}}'; Quando altero a declaração desses vetores os seguintes erros abaixo são disparados. vetor_cargas real[][] := '{null}'; vetor_cargas real[][] := '{{}}'; ERROR: wrong number of array subscripts ERROR: malformed array literal: {{}} CONTEXT: PL/pgSQL function fs_calcular_dtf_passo1 line 65 at block variables initialization Tem uma forma de otimizar esse código?. Agradeço desde já pela atenção de todos. No aguardo on-line. Att. Newton Teixeira do Nascimento Junior e-mail: newton.jun...@eletronorte.gov.br html body font face = arial size = 1 color = #80Aviso:brO emitente desta mensagem eacute; responsaacute;vel por seu conteuacute;do e endereccedil;amento. Cabe ao destinataacute;rio cuidar quanto ao tratamento adequado. Sem a devida autorizaccedil;atilde;o, a divulgaccedil;atilde;o, a reproduccedil;atilde;o, a distribuiccedil;atilde;o ou qualquer outra accedil;atilde;o em desconformidade com as normas internas da ELETRONORTE S/A satilde;o proibidas e passiacute;veis de sanccedil;atilde;o disciplinar, ciacute;vel e criminal. Esta mensagem pode ser monitorada. /font /body /html___ 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 - Estatisticas com prec isão genérica em minutos
Meus caros Marcone e Leandro, muito obrigado pelas dicas e sugestões. Vou testá-las e darei um retorno. Grande abraço a todos. Att. Newton Teixeira do Nascimento Junior Analista de Sistemas - CMAO e-mail: newton.jun...@eletronorte.gov.br html body font face = arial size = 1 color = #80Aviso:brO emitente desta mensagem eacute; responsaacute;vel por seu conteuacute;do e endereccedil;amento. Cabe ao destinataacute;rio cuidar quanto ao tratamento adequado. Sem a devida autorizaccedil;atilde;o, a divulgaccedil;atilde;o, a reproduccedil;atilde;o, a distribuiccedil;atilde;o ou qualquer outra accedil;atilde;o em desconformidade com as normas internas da ELETRONORTE S/A satilde;o proibidas e passiacute;veis de sanccedil;atilde;o disciplinar, ciacute;vel e criminal. Esta mensagem pode ser monitorada. /font /body /html___ 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 - Estatisticas com prec isão genérica em minutos
Olá, comunidade, preciso de ajuda com um SQL. Tenho uma tabela com a seguinte forma: CREATE TABLE bhpas_h_2009_02_02 ( bh_dthr timestamp with time zone, bh_chave integer, bh_variacao integer, valest real, valor real ) Os dados dessa tabela são inseridos em 10 e 10 segundos por um sistema externo. Preciso gerar um relatório com as estatísticas mínimo,media e Maximo com os valores do campo valor com uma precisão definida pelo usuário. Exemplo: quero saber as estatísticas com uma precisão de 5 minutos; com 10 minutos, 15 minutos; 20 minutos; 30 minutos; 60 minutos; 120 minutos; etc Sei fazer o SQL por hora (60 minutos) e por minuto (01 minuto) com o seguinte SQL (vide o SQL abaixo), mas são sei, por exemplo, com precisão de 15 minutos, 05 minutos ou 30 minutos (precisão genérica em minutos). SELECT EXTRACT(MINUTE FROM Y.bh_dthr) as n, MIN(Y.valor), CAST(AVG(Y.valor) as real), MAX(Y.valor) FROM PAS_R X, bhpas_h_2009_02_02 Y WHERE X.BH_CHAVE=Y.BH_CHAVE AND Y.BH_CHAVE = (SELECT BH_CHAVE FROM PAS_R WHERE ID = id_medida' AND bh_dthr_fim IS NULL) GROUP BY EXTRACT(MINUTE FROM Y.bh_dthr) ORDER BY n; SELECT EXTRACT(HOUR FROM Y.bh_dthr) as n, MIN(Y.valor), CAST(AVG(Y.valor) as real), MAX(Y.valor) FROM PAS_R X, bhpas_h_2009_02_02 Y WHERE X.BH_CHAVE=Y.BH_CHAVE AND Y.BH_CHAVE = (SELECT BH_CHAVE FROM PAS_R WHERE ID = id_medida' AND bh_dthr_fim IS NULL) GROUP BY EXTRACT(HOUR FROM Y.bh_dthr) ORDER BY n; Eis dados dessa tabela em um dia entre as 20:00hs e 21:00hs para exemplo (tirei algumas linhas pelo tamanho - só pra dar a ideia). Agradeço desde já pela atenção e estou no aguardo online; SELECT DISTINCT Y.bh_dthr, Y.valor FROM PAS_R X, bhpas_h_2010_01_08 Y WHERE X.BH_CHAVE=Y.BH_CHAVE AND Y.BH_CHAVE = (SELECT BH_CHAVE FROM PAS_R WHERE ID = 'LDCE201MQ' AND bh_dthr_fim IS NULL) and Y.bh_dthr BETWEEN '2010-01-08 20:00:00' AND '2010-01-08 21:00:00'; 2010-01-08 20:00:20-03;77.477 2010-01-08 20:00:30-03;75.7611 2010-01-08 20:01:10-03;81.0406 2010-01-08 20:01:20-03;75.7611 2010-01-08 20:01:30-03;76.949 2010-01-08 20:01:50-03;78.1369 2010-01-08 20:02:00-03;74.7052 2010-01-08 20:02:20-03;77.8729 2010-01-08 20:02:50-03;75.4971 2010-01-08 20:03:20-03;76.685 2010-01-08 20:03:30-03;74.8372 2010-01-08 20:03:40-03;77.8729 2010-01-08 20:03:50-03;73.6493 2010-01-08 20:04:00-03;75.4971 2010-01-08 20:04:10-03;79.1928 2010-01-08 20:04:20-03;76.0251 2010-01-08 20:04:40-03;76.1571 2010-01-08 20:05:00-03;75.2332 2010-01-08 20:05:10-03;72.7254 2010-01-08 20:05:40-03;71.0095 2010-01-08 20:05:50-03;76.4211 2010-01-08 20:06:20-03;74.9692 2010-01-08 20:06:50-03;73.1214 2010-01-08 20:07:00-03;76.4211 2010-01-08 20:07:30-03;73.5173 2010-01-08 20:07:40-03;74.7052 2010-01-08 20:07:50-03;69.4257 2010-01-08 20:08:00-03;74.9692 2010-01-08 20:08:10-03;80.3807 2010-01-08 20:08:20-03;69.5577 2010-01-08 20:08:30-03;75.3652 2010-01-08 20:08:40-03;72.5934 2010-01-08 20:08:50-03;77.8729 2010-01-08 20:09:00-03;74.4412 2010-01-08 20:09:10-03;75.7611 2010-01-08 20:09:20-03;82.6245 2010-01-08 20:09:30-03;77.345 2010-01-08 20:09:40-03;72.0655 2010-01-08 20:15:20-03;78.5329 2010-01-08 20:15:30-03;73.1214 2010-01-08 20:15:50-03;76.949 2010-01-08 20:16:10-03;72.9894 2010-01-08 20:16:20-03;78.2689 2010-01-08 20:46:10-03;71.8015 2010-01-08 20:46:20-03;68.5018 2010-01-08 20:47:10-03;65.466 2010-01-08 20:59:00-03;66.39 2010-01-08 20:59:20-03;69.1617 2010-01-08 20:59:40-03;65.0701 2010-01-08 20:59:50-03;70.4816 2010-01-08 21:00:00-03;64.9381 Newton Teixeira do Nascimento Junior Analista de Sistemas - CMAO Centrais Elétricas do Norte do Brasil S/A - Eletronorte Av. dos Jequitibás, s/nº - Cohebe do Sacavém São Luís-MA - 65043-380 Tel: 3217-5006 / 81330104 e-mail: newton.jun...@eletronorte.gov.br html body font face = arial size = 1 color = #80Aviso:brO emitente desta mensagem eacute; responsaacute;vel por seu conteuacute;do e endereccedil;amento. Cabe ao destinataacute;rio cuidar quanto ao tratamento adequado. Sem a devida autorizaccedil;atilde;o, a divulgaccedil;atilde;o, a reproduccedil;atilde;o, a distribuiccedil;atilde;o ou qualquer outra accedil;atilde;o em desconformidade com as normas internas da ELETRONORTE S/A satilde;o proibidas e passiacute;veis de sanccedil;atilde;o disciplinar, ciacute;vel e criminal. Esta mensagem pode ser monitorada. /font /body /html___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Backup de Tabelas Especificas
Olá comunidade, estou precisando fazer um backup de tabelas especificas. Algumas das tabelas do banco estão no formato pas_h__MM_DD e XXX_r, _XXX_bh, bh__h_ctl, onde _MM_DD indica a data referentes aos dados daquela tabela e XXX letras quaisquer. Quero fazer um backup onde eu indico quais tabelas serão copiadas, tipo: quero as tabelas de 10/10/2009 a 15/10/2009. O resultado seria: De pas_h_2009_10_10 , pas_h_2009_10_11 , pas_h_2009_10_12 , pas_h_2009_10_13 , pas_h_2009_10_14 , pas_h_2009_10_15 XXX_r (todas essas tabelas) bh__h_ctl (todas essas tabelas) Como fazer isso em um só comando? Newton Teixeira do Nascimento Junior Analista de Sistemas - São Luis-MA html body font face = arial size = 1 color = #80Aviso:brO emitente desta mensagem eacute; responsaacute;vel por seu conteuacute;do e endereccedil;amento. Cabe ao destinataacute;rio cuidar quanto ao tratamento adequado. Sem a devida autorizaccedil;atilde;o, a divulgaccedil;atilde;o, a reproduccedil;atilde;o, a distribuiccedil;atilde;o ou qualquer outra accedil;atilde;o em desconformidade com as normas internas da ELETRONORTE S/A satilde;o proibidas e passiacute;veis de sanccedil;atilde;o disciplinar, ciacute;vel e criminal. Esta mensagem pode ser monitorada. /font /body /html___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Comando para executar checkpoint
Olá comunidade, Qual o comando para explicitamente fazer com que os arquivos dentro de pg_xlog sejam escritos no disco (e conseqüentemente excluídos do pg_xlog)? Ou seja, como eu pessoalmente faço o checkpoint? No aguardo. Newton Teixeira do Nascimento Junior Analista de Sistemas - São Luis - Maranhão html body font face = arial size = 1 color = #80Aviso:brO emitente desta mensagem eacute; responsaacute;vel por seu conteuacute;do e endereccedil;amento. Cabe ao destinataacute;rio cuidar quanto ao tratamento adequado. Sem a devida autorizaccedil;atilde;o, a divulgaccedil;atilde;o, a reproduccedil;atilde;o, a distribuiccedil;atilde;o ou qualquer outra accedil;atilde;o em desconformidade com as normas internas da ELETRONORTE S/A satilde;o proibidas e passiacute;veis de sanccedil;atilde;o disciplinar, ciacute;vel e criminal. Esta mensagem pode ser monitorada. /font /body /html___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Como executar comando COPY via Programa em C + libpq ?
Olá comunidade, alguém tem um exemplo de código de como executar um COPY (a partir de um arquivo presente na maquina requisitante) para um servidor Postgresql via um programa em C (utilizando a libpq) ? O programa em C fica na minha maquina (localhost win XP) e o servidor postgres 8.2.4 em Linux. Agradeço pela atenção e fico no aguardo. ps: já estou lendo http://pgdocptbr.sourceforge.net/pg80/libpq-copy.html http://www.postgresql.org/docs/8.4/interactive/libpq-copy.html Newton Teixeira do Nascimento Junior html body font face = arial size = 1 color = #80Aviso:brO emitente desta mensagem eacute; responsaacute;vel por seu conteuacute;do e endereccedil;amento. Cabe ao destinataacute;rio cuidar quanto ao tratamento adequado. Sem a devida autorizaccedil;atilde;o, a divulgaccedil;atilde;o, a reproduccedil;atilde;o, a distribuiccedil;atilde;o ou qualquer outra accedil;atilde;o em desconformidade com as normas internas da ELETRONORTE S/A satilde;o proibidas e passiacute;veis de sanccedil;atilde;o disciplinar, ciacute;vel e criminal. Esta mensagem pode ser monitorada. /font /body /html___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Como executar comando COPY via Programa em C
alguém tem um exemplo de código de como executar um COPY (a partir de um arquivo presente na maquina requisitante) para um servidor Postgresql via um programa em C (utilizando a libpq) ? O programa em C fica na minha maquina (localhost win XP) e o servidor postgres 8.2.4 em Linux. Do manual: Files named in a COPY command are read or written directly by the server, not by the client application. Therefore, they must reside on or be accessible to the database server machine, not the client. They must be accessible to and readable or writable by the PostgreSQL user (the user ID the server runs as), not the client. When STDIN or STDOUT is specified, data is transmitted via the connection between the client and the server. http://www.postgresql.org/docs/current/interactive/sql-copy.html http://www.postgresql.org/docs/current/interactive/sql-copy.html Creio que a forma mais transparente seja seu programa C ler o arquivo e transmiti-lo logo após o comando COPY STDIN (que é o que faz o \copy do psql). Não esquecer de finalizar com uma linha contendo apenas \. (sem as aspas). Osvaldo Osvaldo, isso que dizer que tenho que 'transmiti-lo' via FTP (por outro meio qualquer) antes de fazer o código do COPY via o programa em C através da libpq? Em caso, afirmativo como faço isso em C? Senão, sabe como fazer isso através da libpq? Fico no aguardo. Att. Newton Teixeira do Nascimento Junior html body font face = arial size = 1 color = #80Aviso:brO emitente desta mensagem eacute; responsaacute;vel por seu conteuacute;do e endereccedil;amento. Cabe ao destinataacute;rio cuidar quanto ao tratamento adequado. Sem a devida autorizaccedil;atilde;o, a divulgaccedil;atilde;o, a reproduccedil;atilde;o, a distribuiccedil;atilde;o ou qualquer outra accedil;atilde;o em desconformidade com as normas internas da ELETRONORTE S/A satilde;o proibidas e passiacute;veis de sanccedil;atilde;o disciplinar, ciacute;vel e criminal. Esta mensagem pode ser monitorada. /font /body /html___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Otimizar sql - Reutilizar resultado de subselect
Olá comunidade, Desculpem a insistência, mas alguém conhece uma forma de contornar essa situação ou a forma que estou atualmente fazendo é a única forma viável? http://listas.postgresql.org.br/pipermail/pgbr-geral/2009-June/015980.html http://listas.postgresql.org.br/pipermail/pgbr-geral/2009-June/015994.html Agradeço desde já PS: a versão da empresa é a 8.2.4 e não posso migrar. Newton Teixeira do Nascimento Junior e-mail: newton.jun...@eletronorte.gov.br html body font face = arial size = 1 color = #80Aviso:brO emitente desta mensagem eacute; responsaacute;vel por seu conteuacute;do e endereccedil;amento. Cabe ao destinataacute;rio cuidar quanto ao tratamento adequado. Sem a devida autorizaccedil;atilde;o, a divulgaccedil;atilde;o, a reproduccedil;atilde;o, a distribuiccedil;atilde;o ou qualquer outra accedil;atilde;o em desconformidade com as normas internas da ELETRONORTE S/A satilde;o proibidas e passiacute;veis de sanccedil;atilde;o disciplinar, ciacute;vel e criminal. Esta mensagem pode ser monitorada. /font /body /html___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Res: BD XML
Marcelo, quase dois anos atrás fiz essa experiência. Fiz um programa que processava arquivos com milhares de informações, minerava esses arquivos para obter os dados que queria. E naquela época decidi passar os dados para formato XML, uma vez que esses dados apresentavam-se em uma forma hierárquica. Na época, estava trabalhando com VB.NET + SQL Server 2005. No final o programa processava os arquivos indicados e gerava um XML com os dados desejados. Então percebi duas grandes dificuldades que me levaram a desistir do XML: 1) Processar arquivos realmente é muito lento; eu já tinha que processar os arquivos fontes por obrigação. Além disso, tinha que processar também outro arquivo (o xml) para criação, inserção e atualização; acredite isso não é nada rápido. 2) Fiz uma aplicação web que utilizava esses dados, a qual também tinha que processar o arquivo XML para renderizar as informações para o cliente; O pior: tanto o servidor tinha que processar (uma vez que usava o ASP.NET) quanto o browser do cliente; tenha certeza que o cliente abrir de 01 a 05 MB de dados no internet explorer, dependendo da versão desse browser e da quantidade de memória do cliente pode ser dose; trava na hora e fica tudo branco; depois de uns 05 minutos ele aparece (dependendo da quantidade de dados) Então, aprendi que formato XML não é para armazenar dados; não serve como banco; não ajuda em inserts, selects e updates; é lento pra isso; XML é principalmente (ao meu ver) para armazenar informações de configurações de sistemas e/ou troca de informações inter-sistemas. Se você pensa em colocar 500GB em arquivos XML, dependendo dos requisitos de sua aplicação (precisa de processamento rápido? Tem muita memória disponível?), talvez seja uma grande perca de tempo. Fica a dica da experiência que passei. Um grande abraço a todos. Newton Teixeira do Nascimento Junior e-mail: newton.jun...@eletronorte.gov.br html body font face = arial size = 1 color = #80Aviso:brO emitente desta mensagem eacute; responsaacute;vel por seu conteuacute;do e endereccedil;amento. Cabe ao destinataacute;rio cuidar quanto ao tratamento adequado. Sem a devida autorizaccedil;atilde;o, a divulgaccedil;atilde;o, a reproduccedil;atilde;o, a distribuiccedil;atilde;o ou qualquer outra accedil;atilde;o em desconformidade com as normas internas da ELETRONORTE S/A satilde;o proibidas e passiacute;veis de sanccedil;atilde;o disciplinar, ciacute;vel e criminal. Esta mensagem pode ser monitorada. /font /body /html___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Otimizar sql - Reutilizar resultado de subselect
Olá comunidade, Tenho o seguinte SELECT e gostaria de otimizá-lo. Eis o mesmo: SELECT A.eq, B.id_eq, B.unidade, B.tensao_equip, B.nominal, (SELECT MAX(Y.VALOR) FROM PAS_R X, bhpas_h_2009_05_01 Y WHERE X.BH_CHAVE=Y.BH_CHAVE AND Y.BH_CHAVE = (SELECT BH_CHAVE FROM PAS_R WHERE ID = B.id_eq AND bh_dthr_fim IS NULL)) AS maximo, (SELECT MAX(Y.VALOR) FROM PAS_R X, bhpas_h_2009_05_01 Y WHERE X.BH_CHAVE=Y.BH_CHAVE AND Y.BH_CHAVE = (SELECT BH_CHAVE FROM PAS_R WHERE ID = B.id_eq AND bh_dthr_fim IS NULL))/B.nominal)*100 AS AS Percent, CAST('2009_05_01' as DATE) as Data FROM EQUIPAMENTOS AS A, IDS_EQUIPAMENTOS AS B, RELATORIOS_EQUIPAMENTOS AS C WHERE A.eq = B.eq AND A.eq=C.eq AND C.nome_relatorio='ICE' ORDER BY percent DESC; (SELECT MAX(Y.VALOR) FROM PAS_R X, bhpas_h_2009_05_01 Y WHERE X.BH_CHAVE=Y.BH_CHAVE AND Y.BH_CHAVE = (SELECT BH_CHAVE FROM PAS_R WHERE ID = B.id_eq AND bh_dthr_fim IS NULL)) AS Maximo O sub-select acimal calcula um determinado valor Maximo; tenho também que mostrar em outra coluna o percentual obtido, o qual é o (Maximo/nominal)*100; Para rodar, estou tendo que executar duas vezes o mesmo sub-select que retorna o mesmo resultado para mostrar os dados que são necessários e isso tem deixado a consulta lenta. Gostaria de ficasse assim: SELECT A.eq, B.id_eq, B.unidade, B.tensao_equip, B.nominal, (SELECT MAX(Y.VALOR) FROM PAS_R X, bhpas_h_2009_05_01 Y WHERE X.BH_CHAVE=Y.BH_CHAVE AND Y.BH_CHAVE = (SELECT BH_CHAVE FROM PAS_R WHERE ID = B.id_eq AND bh_dthr_fim IS NULL)) AS maximo, (maximo/B.nominal)*100 AS AS Percent, CAST('2009_05_01' as DATE) as Data FROM EQUIPAMENTOS AS A, IDS_EQUIPAMENTOS AS B, RELATORIOS_EQUIPAMENTOS AS C WHERE A.eq = B.eq AND A.eq=C.eq AND C.nome_relatorio='ICE' ORDER BY percent DESC; Porém quando eu executo dessa forma o seguinte erro é exibido: ERRO: coluna maximo não existe LINE 5: (maximo/B.nominal)*100 AS Percent, ^ Fico no aguardo. Newton Teixeira do Nascimento Junior Analista de Sistemas - CMAO e-mail: newton.jun...@eletronorte.gov.br html body font face = arial size = 1 color = #80Aviso:brO emitente desta mensagem eacute; responsaacute;vel por seu conteuacute;do e endereccedil;amento. Cabe ao destinataacute;rio cuidar quanto ao tratamento adequado. Sem a devida autorizaccedil;atilde;o, a divulgaccedil;atilde;o, a reproduccedil;atilde;o, a distribuiccedil;atilde;o ou qualquer outra accedil;atilde;o em desconformidade com as normas internas da ELETRONORTE S/A satilde;o proibidas e passiacute;veis de sanccedil;atilde;o disciplinar, ciacute;vel e criminal. Esta mensagem pode ser monitorada. /font /body /html___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Otimizar sql - Reutilizar resultado de subselect
Olá comunidade, vamos vê se consigo demonstrar o que estou querendo: Tenho um select com a seguinte estrutura: SELECT campo1 AS X, campo2 AS Y, campo3 AS Z, (campo3/campo2)*100 AS W FROM TABELA1, TABELA2 where pk_tabela1 = fk_tabela2. O campo3 é obtido através de um sub-select. Este eu apresento abaixo (novamente): (SELECT MAX(Y.VALOR) FROM PAS_R X, bhpas_h_2009_05_01 Y WHERE X.BH_CHAVE=Y.BH_CHAVE AND Y.BH_CHAVE = (SELECT BH_CHAVE FROM PAS_R WHERE ID = B.id_eq AND bh_dthr_fim IS NULL)) Observem que para exibir o campo de apelido W, eu preciso fazer uma conta com os campos *campo2* (um campo normal de uma das tabelas envolvidas) e *campo3* (obtido através de um sub-select). O problema é que não sei como reutilizar o resultado de campo3 para calcular o valor do campo W. Para rodar a consulta estou tendo que calcular o sub-select acima duas vezes. Quando eu programava com SQL Server eu fazia isso normalmente, porém não estou sabendo fazer isso com o postgres. Queria que o SQL fosse como está abaixo: SELECT A.eq, B.id_eq, B.unidade, B.tensao_equip, B.nominal, (SELECT MAX(Y.VALOR) FROM PAS_R X,b hpas_h_2009_05_01 Y WHERE X.BH_CHAVE=Y.BH_CHAVE AND Y.BH_CHAVE = (SELECT BH_CHAVE FROM PAS_R WHERE ID = B.id_eq AND bh_dthr_fim IS NULL)) AS apelido_maximo, (apelido_maximo/B.nominal)*100 AS Percent, CAST('2009_05_01' as DATE) as Data FROM EQUIPAMENTOS AS A, IDS_EQUIPAMENTOS AS B, RELATORIOS_EQUIPAMENTOS AS C WHERE A.eq = B.eq AND A.eq=C.eq AND C.nome_relatorio='ICE' ORDER BY percent DESC; Mas atualmente estou fazendo assim (executando o mesmo sub-select duas vezes): SELECT A.eq, B.id_eq, B.unidade, B.tensao_equip, B.nominal, (SELECT MAX(Y.VALOR) FROM PAS_R X, bhpas_h_2009_05_01 Y WHERE X.BH_CHAVE=Y.BH_CHAVE AND Y.BH_CHAVE = (SELECT BH_CHAVE FROM PAS_R WHERE ID = B.id_eq AND bh_dthr_fim IS NULL)) AS maximo, (SELECT MAX(Y.VALOR) FROM PAS_R X, bhpas_h_2009_05_01 Y WHERE X.BH_CHAVE=Y.BH_CHAVE AND Y.BH_CHAVE = (SELECT BH_CHAVE FROM PAS_R WHERE ID = B.id_eq AND bh_dthr_fim IS NULL))/B.nominal)*100 AS Percent, CAST('2009_05_01' as DATE) as Data FROM EQUIPAMENTOS AS A, IDS_EQUIPAMENTOS AS B, RELATORIOS_EQUIPAMENTOS AS C WHERE A.eq = B.eq AND A.eq=C.eq AND C.nome_relatorio='ICE' ORDER BY percent DESC; Desde já agradeço a atenção e fico no aguardo. PS: O campo Maximo representa o valor Maximo de tensão que um determinado equipamento apresentou em um mês e o nominal o valor máximo (ou limite) que esse equipamento pode suportar em falhar. O Maximo dividido pelo percentual representa o carregamento percentual desse equipamento no mês. Newton Teixeira do Nascimento JuniorAnalista de Sistemas - CMAO e-mail: newton.jun...@eletronorte.gov.br html body font face = arial size = 1 color = #80Aviso:brO emitente desta mensagem eacute; responsaacute;vel por seu conteuacute;do e endereccedil;amento. Cabe ao destinataacute;rio cuidar quanto ao tratamento adequado. Sem a devida autorizaccedil;atilde;o, a divulgaccedil;atilde;o, a reproduccedil;atilde;o, a distribuiccedil;atilde;o ou qualquer outra accedil;atilde;o em desconformidade com as normas internas da ELETRONORTE S/A satilde;o proibidas e passiacute;veis de sanccedil;atilde;o disciplinar, ciacute;vel e criminal. Esta mensagem pode ser monitorada. /font /body /html___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Otimizar sql - Reutilizar resultado de subselect
Osvaldo, a versão da empresa é a 8.2.4 e não posso migrar. Att. Newton Teixeira do Nascimento JuniorAnalista de Sistemas - CMAO e-mail: newton.jun...@eletronorte.gov.br html body font face = arial size = 1 color = #80Aviso:brO emitente desta mensagem eacute; responsaacute;vel por seu conteuacute;do e endereccedil;amento. Cabe ao destinataacute;rio cuidar quanto ao tratamento adequado. Sem a devida autorizaccedil;atilde;o, a divulgaccedil;atilde;o, a reproduccedil;atilde;o, a distribuiccedil;atilde;o ou qualquer outra accedil;atilde;o em desconformidade com as normas internas da ELETRONORTE S/A satilde;o proibidas e passiacute;veis de sanccedil;atilde;o disciplinar, ciacute;vel e criminal. Esta mensagem pode ser monitorada. /font /body /html___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Função que retorna genericamente o resultado de um SELECT qualquer
Olá comunidade, Como fazer uma função retornar genericamente o resultado de um SELECT qualquer? (PostgreSql 8.2.4 + CentOS 4.5) Por exemplo, quando executo o seguinte comando select fs_select_registros_pts_invalidos(current_date); O seguinte erro é retornado: ERRO: função que tem argumento do tipo conjunto foi chamada em um contexto que não pode aceitar um conjunto CONTEXT: PL/pgSQL function fs_select_registros_pts_invalidos line 58 at return next ** Erro ** ERRO: função que tem argumento do tipo conjunto foi chamada em um contexto que não pode aceitar um conjunto SQL state: 0A000 Contexto: PL/pgSQL function fs_select_registros_pts_invalidos line 58 at return next Isso porque não existe uma tabela com a mesma estrutura (campos) que o select retorna, uma vez que retorna campos oriundos de junções de outras tabelas. Como fazer uma função retornar um select sem que ter criar uma tabela ou view para os resultados desse select ? Eis a função (exemplo) : CREATE OR REPLACE FUNCTION fs_select_registros_pts_invalidos(data date) RETURNS SETOF record AS $BODY$ DECLARE sql varchar; str_return varchar; str_hora_integridade varchar; data_aux date; r RECORD; record_aux RECORD; chave boolean; flag boolean; BEGIN chave=true; data_aux = data; WHILE (chave = true) LOOP sql = 'SELECT MAX(B.BH_DTHR) AS resultado FROM PAS_R A, BHPAS_H_' || replace(CAST(data_aux AS character varying(300)), '-','_') || ' B where A.BH_CHAVE=B.BH_CHAVE AND B.BH_VARIACAO=0 AND B.BH_CHAVE IN (SELECT BH_CHAVE FROM PAS_R WHERE ID = ''ACBR701VBV'') GROUP BY A.ID'; flag = false; FOR record_aux IN EXECUTE sql LOOP flag = true; str_hora_integridade = record_aux.resultado; str_hora_integridade = substring(record_aux.resultado from 11 for 18); str_hora_integridade = substring(str_hora_integridade from 1 for 9); str_hora_integridade = trim(str_hora_integridade); END LOOP; if ( flag = false) THEN data_aux = data_aux - 1; ELSE chave = false; END IF; END LOOP; sql = 'SELECT a.id, a.nome, TO_CHAR(b.bh_dthr,''DD/MM/ HH24:MI'') as data, b.bh_variacao, b.estado, (b.estado::bit(14) 1::bit(14))::INTEGER as af, (b.estado::bit(14) 2::bit(14))::INTEGER as fovar, (b.estado::bit(14) 4::bit(14))::INTEGER as falha, (b.estado::bit(14) 8::bit(14))::INTEGER as ivorg, (b.estado::bit(14) 16::bit(14))::INTEGER as maorg, (b.estado::bit(14) 32::bit(14))::INTEGER as manua, (b.estado::bit(14) 64::bit(14))::INTEGER as ninci FROM pds_r a, bhpds_h_' || replace(CAST(data_aux AS character varying(300)), '-','_') || ' b WHERE a.bh_chave=b.bh_chave AND (b.estado::bit(14) 8::bit(14))::INTEGER 0 AND bh_dthr = ''' || data_aux || ' ' || str_hora_integridade || ''' GROUP BY a.id, a.nome, b.estado, b.bh_dthr, b.bh_variacao ORDER BY id, bh_dthr'; FOR r IN EXECUTE sql LOOP RETURN NEXT r; END LOOP; RETURN; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; html body font face = arial size = 1 color = #80Aviso:brO emitente desta mensagem eacute; responsaacute;vel por seu conteuacute;do e endereccedil;amento. Cabe ao destinataacute;rio cuidar quanto ao tratamento adequado. Sem a devida autorizaccedil;atilde;o, a divulgaccedil;atilde;o, a reproduccedil;atilde;o, a distribuiccedil;atilde;o ou qualquer outra accedil;atilde;o em desconformidade com as normas internas da ELETRONORTE S/A satilde;o proibidas e passiacute;veis de sanccedil;atilde;o disciplinar, ciacute;vel e criminal. Esta mensagem pode ser monitorada. /font /body /html___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Instalação PostgreeSQL - Conexao Bando de Dados
Danilo, verifique se o serviço do Postgres está rodando no Windows. Se não tiver, inicialize o serviço. Verifique se você está tentando conectar na porta que você definiu na instalação. Outra coisa é verificar se o usuário que você está tentando conectar é um usuário autorizado para acessar o banco. Eis um link - http://agajorte.blogspot.com/2009/03/meu-postgresql-nao-conecta.html Att. - Newton Teixeira html body font face = arial size = 1 color = #80Aviso:brO emitente desta mensagem eacute; responsaacute;vel por seu conteuacute;do e endereccedil;amento. Cabe ao destinataacute;rio cuidar quanto ao tratamento adequado. Sem a devida autorizaccedil;atilde;o, a divulgaccedil;atilde;o, a reproduccedil;atilde;o, a distribuiccedil;atilde;o ou qualquer outra accedil;atilde;o em desconformidade com as normas internas da ELETRONORTE S/A satilde;o proibidas e passiacute;veis de sanccedil;atilde;o disciplinar, ciacute;vel e criminal. Esta mensagem pode ser monitorada. /font /body /html___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Função que retorna genericamente o resultado de um SELECT qualquer
Jota, fiz da forma que você indicou [ select * from fs_select_registros_pts_invalidos(current_date); ] e o postgres retornou o seguinte erro: ERRO: uma lista de definição de colunas é requerida para funções que retornam record ** Erro ** ERRO: uma lista de definição de colunas é requerida para funções que retornam record SQL state: 42601 O que eu devo alterar para funcionar sem ter que criar uma tabela ou view no banco ? html body font face = arial size = 1 color = #80Aviso:brO emitente desta mensagem eacute; responsaacute;vel por seu conteuacute;do e endereccedil;amento. Cabe ao destinataacute;rio cuidar quanto ao tratamento adequado. Sem a devida autorizaccedil;atilde;o, a divulgaccedil;atilde;o, a reproduccedil;atilde;o, a distribuiccedil;atilde;o ou qualquer outra accedil;atilde;o em desconformidade com as normas internas da ELETRONORTE S/A satilde;o proibidas e passiacute;veis de sanccedil;atilde;o disciplinar, ciacute;vel e criminal. Esta mensagem pode ser monitorada. /font /body /html___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Salvar a definição de funções via psql
Euler, executei o script que você passou mas apenas o primeiro select está rodando; A função que você passou não está sendo reconhecida. Eis a saída: Resultado da consulta com 28 registros descartados. ERRO: função pg_catalog.pg_get_functiondef(integer) não existe LINE 7: SELECT pg_catalog.pg_get_functiondef(665459); ^ HINT: Nenhuma função corresponde com o nome e os tipos de argumento informados. Você precisa adicionar conversões de tipo explícitas. Fui na árvore de funções do catálogo pg_catalog, verifiquei que essa função não está aparecendo. A versão do postgres é 8.2.4 rodando em um CentOS 4.5. Como faço pra obter também as definições de visões, tabelas e triggers que tenham apresentam um certo padrão nos desses objetos ? Exemplo - quero salvar todas as definições de objeto que tenham DTF em seus nomes (objetos que eu construi). Outra Euler, como salvar o resultado dos select's (dentro do for) em um arquivo texto? html body font face = arial size = 1 color = #80Aviso:brO emitente desta mensagem eacute; responsaacute;vel por seu conteuacute;do e endereccedil;amento. Cabe ao destinataacute;rio cuidar quanto ao tratamento adequado. Sem a devida autorizaccedil;atilde;o, a divulgaccedil;atilde;o, a reproduccedil;atilde;o, a distribuiccedil;atilde;o ou qualquer outra accedil;atilde;o em desconformidade com as normas internas da ELETRONORTE S/A satilde;o proibidas e passiacute;veis de sanccedil;atilde;o disciplinar, ciacute;vel e criminal. Esta mensagem pode ser monitorada. /font /body /html___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Salvar a definição de funções via psql
Olá comunidade, Existe algum comando pra salvar a definição de todas as funções (functions) de um banco para um arquivo via psql ? html body font face = arial size = 1 color = #80Aviso:brO emitente desta mensagem eacute; responsaacute;vel por seu conteuacute;do e endereccedil;amento. Cabe ao destinataacute;rio cuidar quanto ao tratamento adequado. Sem a devida autorizaccedil;atilde;o, a divulgaccedil;atilde;o, a reproduccedil;atilde;o, a distribuiccedil;atilde;o ou qualquer outra accedil;atilde;o em desconformidade com as normas internas da ELETRONORTE S/A satilde;o proibidas e passiacute;veis de sanccedil;atilde;o disciplinar, ciacute;vel e criminal. Esta mensagem pode ser monitorada. /font /body /html___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Consulta diária que leva 45 minutos para terminar - A mensal leva
Olá comunidade, peço ajuda de vocês mais uma vez - Não sei mais como melhorar o desempenho. Por favor, me ajudem. ### CENÁRIO Preciso otimizar uma consulta que faz complexos cálculos em grandes conjuntos de dados. Tenho que chamar a função fs_disponibilidade_barras_diario [1] fornecendo o identificador do equipamento (barra) e data em questão. Se chamar a função com barra com o valor -1, então a função vai calcular a disponibilidade para todos os equipamentos (11 no total). O problema é que apenas pra um dia, a função está demorando + ou - 45 minutos, e meu chefe quer um relatório mensal (fs_disponibilidade_barras_mensal [2] ) para todas as barras; do jeito que está, isso levaria 23 horas. Já li vários materiais e links sugeridos por vocês na lista e já otimizei o SQL o quanto pude, principalmente as funções [3] e [4]. Depois de otimizar os sql's [3] e [4] (estava muito mais lento antes), partir então para os parâmetros de configuração e fiz as alterações mostradas em [X]. Novamente o tempo continuou o mesmo. A consulta já terminou há muito tempo e o cache de disco está até agora ocupando 96% da memória livre. Eis as configurações da memória depois da execução de fs_disponibilidade_barras_diario [1] pra o dia 2009-02-01. *** Logo após reiniciar o sistema e exatamente antes de executar [1] para o dia 2009-02-02 Memória física total - 7.92 GB Memória física livre - 7.46 GB Memória compartilhada - 0.00 KB Buffers de disco - 21.11 MB Cache de disco - 279.75 MB Memória swap total - 15.72 GB Memória swap livre - 15.72 GB *** Depois de executar [1] Memória física total - 7.92 GB Memória física livre - 33.76 MB Memória compartilhada - 0.00 KB Buffers de disco - 16.84 MB Cache de disco - 7.63 GB Memória swap total -15.72 GB Memória swap livre - 15.72 GB O mais interessante é que a consulta diária acabou e o cache de disco + buffers de disco estão ocupando a memória quase toda e não foram liberados. Não sei se isso é normal ou não. Para se ter uma idéia, eis a quantidade de registros para cada barra para apenas um dia (data=01/02/2009): SELECT id_barra, count(*) from DTF_TENSAO_BARRAS where CAST(data_hora AS DATE)='2009-02-01' group by id_barra; LIMC401M0VBV 6133 CH_B2T1_MES-32 1395 PRTF601VVA4 527 IZIA401M0VBV 6213 LIIT401M0VBV 6069 PDTF601VBV4 6179 LDBR604M0VBN5288 MR2_BP401VBV524 MR2_BP501VBV601 PFBR501MVFBV 265 PFCL401MVFBV6305 Talvez um dos problemas é que a função fs_calcular_detalhes_dtf_tipo2 [4] precisa ordernar cada um desses conjuntos de registros pelos campos id_barra e data_hora (preciso dos registros ordernados por esses campos para que o cálculo saia correto). Acho que ordernar 06 mil registros para uma barra pode aumentar muito o tempo e consumo de memória. Mais o cálculo diário precisa fazer isso pra 11 barras e o mensal tem q fazer a mesma coisa só que pra 30 ou 31 dias; sql = SELECT * FROM DTF_TENSAO_BARRAS WHERE CAST(data_hora AS DATE) = '2009-02-03' ORDER BY id_barra, data_hora ASC FOR record_dtf_tensao_barras IN EXECUTE sql LOOP CALCULOS END LOOP; ###PERGUNTAS 1) Tem mais alguma configuração a ser feita no postgresql.conf que vocês recomendam que eu faça ? 2) Você recomendam fazer alguma alteração a nível de sql em alguma função, principalmente as funções [3] e [4] ? 3) É normal o cache de disco ficar lotado depois do termino da consulta ? Se não for, como liberar esse espaço depois da execução de [3] e [4] via plpgsql ? PS: não sei nada sobre a teoria de índices (ainda vou começar a estudar essa parte). Estou mando em anexo, vários arquivos: postgresql.conf, todas as tabelas e funções que utilizo, as função [3] e [4] comentadas com minhas dúvidas principais, EXPLAIN ANALYSE que fiz ontem no banco e o relatório de estatísticas das tabelas feitas pelo pgAdmin. Já foram feitos o cálculos para 15 dias, ou seja, as tabelas DTF_TENSAO_BARRAS, DTF_BARRAS_DETALHES, DISPONIBILIDADE_EQ tem dados de 15 dias. ### CARACTERISTICAS HARWARE SOFTWARE Sistema Operacional CentOS 4.5 SGBD Postgresql 8.2.4 Processador Xeon FC-LGA 771 dual core Cache L2 4MB e Memória RAM de 7.92 GB. É um servidor dedicado de banco de dados e servidor Web. ### POSTGRESQL.CONF [X] Shared_buffer = 768 MB Work_men = 256 MB Maintenance_work_mem = 768 MB Effective_cache_size = 1280 MB Random_page_cost = 3.0 Max_fsm_pages = 80 Max_fsm_relations = 2000 Fsync = OFF Wal_buffer = 64 Checkpoint_segments = 16 ### TABELAS e FUNÇÕES [1] fs_disponibilidade_barras_diario(barra character varying, data date, tolerancia integer) [2] fs_disponibilidade_barras_mensal(barra character varying, mes integer, ano integer, tolerancia integer) [3] fs_calcular_detalhes_dtf_tipo1 (barra character varying, data date)
[pgbr-geral] Select que retorna o valor médio em um intervalo de tempo
Olá comunidade, peço a ajuda pra construir um seguinte select: Tenho uma tabela X com os campos data_hora (timestamp without timezone) e valor (real). Essa tabela recebe registros a cada 10 ou 30 segundos. Ao fim do dia, esta tabela está com cerca de 6500 registros. Quero plotar um gráfico Valor X Tempo, porém não dá com essa quantidade de registros. Gostaria de fazer um select que retornasse a média de valores em um determinado intervalo, por exemplo: o valor médio a cada minuto ou o valor médio a cada 02 minutos, ou o valor média a cada 05 minutos, etc (Esse intervalo poderia ser um parâmetro). Como posso fazer esse select? Eis alguns registros: 2009-04-05 00:01:40; 71.941; 2009-04-05 00:02:50; 71.812; 2009-04-05 00:03:10 71.941; 2009-04-05 00:04:30; 72.07; 2009-04-05 00:05:10; 71.682; 2009-04-05 00:05:20; 71.812; 2009-04-05 00:06:10; 71.682; ___ 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 que retorna o valor médio em um intervalo de tempo
Caro Osvaldo, pode passar um exemplo pra seu colega não muito expert? De qualquer maneira, muito obrigado pela dica. Att. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Otimizar SQL
Comunidade, atualmente faço a seguinte operação via o SQL abaixo (executado dinamicamente): sql_aux = 'INSERT INTO DTF_TENSAO_BARRAS (id_barra,data_hora,valor,id_tipo_dia) SELECT DISTINCT A.ID, B.BH_DTHR, B.VALOR,' || cast(idtipodia as varchar) || ' FROM PAS_R A, BHPAS_H_' || replace(CAST(data AS character varying(300)), '-','_') || ' B WHERE A.BH_CHAVE=B.BH_CHAVE AND B.BH_DTHR ''' || CAST(data AS character varying(300)) || ' ' || hora_maxima_do_dia || ''' AND B.BH_DTHR ''' || CAST(data AS character varying(300)) || ' 23:59:59'' AND B.BH_CHAVE IN (SELECT BH_CHAVE FROM PAS_R WHERE ID = ''' || record_ids_barras.id_barra || ''' );'; EXECUTE sql_aux; A questão é que a tabela BHPAS__MM_DD apresenta às vezes mais de 06 milhões de registros (com a cláusula DISTINCT; sem essa cláusula o numero de registros triplica (3x) devido ao um erro estranho na aplicação que alimenta o banco; a tabela BHPAS__MM_DD não possui chave primária - não fui eu quem criou o banco e nem posso alterar) e esses mesmos 06 milhões ainda serão passados pelo WHERE da consulta resultando em média + ou - 6000 registros pra serem copiados para tabela DTF_TENSAO_BARRAS, a qual não está vazia. Da maneira que estou fazendo hoje, a consulta está demorando quase 10 segundos (para as tabelas que têm + 06 milhões) e isso apenas pra um dia. Quando roda a consulta mensal, isso pode levar até mais de 5 minutos, uma vez que como a consulta é dinâmica e o plano de execução não é reutilizado. (SOCORRO!!! ahauahauahuhuahu). PERGUNTA: Tem como otimizar essa consulta de alguma maneira? Dá pra usar o COPY nesse caso? PostgreSQL 8.2.4 - S.O. CentOS 4.5 Eis as tabelas (e índices) envolvidos nessa consulta: CREATE TABLE bhpas_h_2009_01_29 ( bh_dthr timestamp with time zone, bh_chave integer, bh_variacao integer, flag integer, flagest smallint, linfa real, linfe real, linfu real, lsupa real, lsupe real, lsupu real, resnorm real, rgalr smallint, valest real, valor real ) WITH (OIDS=FALSE) TABLESPACE sagebhtab; ALTER TABLE bhpas_h_2009_01_29 OWNER TO sage; CREATE INDEX pas_h_2009_01_29_a_i ON bhpas_h_2009_01_29 USING btree (bh_chave, bh_dthr) TABLESPACE sagebhind; CREATE TABLE pas_r ( bh_dthr_ini timestamp with time zone, bh_dthr_fim timestamp with time zone, bh_sinonimo integer, bh_chave integer, bh_indtr integer, eqp character(18), estacao character(12), histper smallint, id character(24), nome character(42), tac character(12), tipoe smallint, tpeqp smallint ) WITH (OIDS=FALSE) TABLESPACE sagebhref; ALTER TABLE pas_r OWNER TO sage; CREATE UNIQUE INDEX pas_r_a_i ON pas_r USING btree (bh_chave, bh_dthr_ini, bh_dthr_fim) TABLESPACE sagebhind; CREATE INDEX pas_r_b_i ON pas_r USING btree (id) TABLESPACE sagebhind; CREATE TABLE DTF_TENSAO_BARRAS ( id_barra character varying(20) NOT NULL, data_hora timestamp without time zone NOT NULL, valor real, status_carga_1 character varying(10), -- Pode receber 02 valores:... status_carga_2 character varying(10), -- Pode receber 04 valores:... id_tipo_dia integer, id_tipo_carga integer, CONSTRAINT pk-dtf-tensao-barras PRIMARY KEY (id_barra, data_hora), CONSTRAINT fk-dtf-tensao-barras FOREIGN KEY (id_barra) REFERENCES DTF_IDS_BARRAS (id_barra) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ) CREATE INDEX indice1-dtf-tensao-barras ON DTF_TENSAO_BARRAS USING btree (id_barra, data_hora); ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Scripts de Manutenção Postgres em ambiente Linux
Olá comunidade, Onde posso encontrar bons scripts de manutenção para postgresql (8.2.4) para ambiente Linux (CentOS) ? Podem compartilhar os vossos scripts? Scripts em Shell Linux (ou perl) para backup, execução de vacuum, execução de funções/stored procedures criadas pelo usuário, entre outras rotinas que não conheço. E se não for pedir muito, os passos para executar no Linux (para usuários Windows). Desde já agradeço, Att. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Função que retorna vários par âmetros de saída para aplicação
Olá comunidade, preciso de uma função que retorne quatro valores ao mesmo tempo para uma aplicação em ASP.NET. Em uma maneira ideal, os quatro selects abaixo retornariam seus resultados através de 04 parâmetros de saída OUT. Os select 1 e 2 retornariam seus resultados em forma de strings e os selects 3 e 4 retornariam em forma de vetores de inteiros. 1) SELECT nome_subest FROM SUBESTACOES WHERE sigla_subest=(SELECT sigla_subest FROM DTF_IDS_BARRAS WHERE nome_barra = 'LIBR6-01'); 2) SELECT data_inicio FROM DTF_TENSOES_SUBEST AS X WHERE X.id_barra = (SELECT id_barra FROM DTF_IDS_BARRAS WHERE nome_barra = 'MRBP5-01') 3) SELECT Y.* FROM DTF_TENSOES_SUBEST AS X, DTF_LIMITES_TENSOES_SUBEST AS Y WHERE X.id_tensoes_subest = (SELECT id_tensoes_subest FROM DTF_TENSOES_SUBEST AS X WHERE X.id_barra = (SELECT id_barra FROM DTF_IDS_BARRAS WHERE nome_barra = 'MRBP5-01')) AND X.id_tensoes_subest = Y.id_tensoes_subest; 4) SELECT Z.* FROM DTF_FAIXAS_HORARIAS AS Z WHERE Z.id_limites_tensoes_subest IN (SELECT Y.id_limites_tensoes_subest FROM DTF_TENSOES_SUBEST AS X, DTF_LIMITES_TENSOES_SUBEST AS Y WHERE X.id_tensoes_subest = (SELECT id_tensoes_subest FROM DTF_TENSOES_SUBEST AS X WHERE X.id_barra = (SELECT id_barra FROM DTF_IDS_BARRAS WHERE nome_barra = 'MRBP5-01')) AND X.id_tensoes_subest = Y.id_tensoes_subest); -- */ PERGUNTAS: [1] - É possível fazer isso ou tenho que realizar mesmo 04 selects um de cada vez a partir da aplicação? [2] - Tem uma forma direta de transformar o resultado de um select em um array/vetor ? [3] - Como consumir/utilizar parâmetros OUT na aplicação (.NET) ? Agradeço pela atenção e estou no aguardo 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] Função que retorna vários par âmetros de saída para a aplicação
Roberto, Pra que? Imagino que tenha sim, mas como eu quase nunca uso arrays em PL/pgSQL eu nao sei te dizer. Prefiro usar registros mesmo. É possível retornar 02 records ao mesmo tempo para a aplicação? Mas mesmo que dê, gostaria de saber se existe uma forma de transformar o resultado de um select em array de forma direta. Nao sei. Vide a documentacao do teu driver. Eu comecei a utilizar o Npgsql. Se alguém tiver um exemplo de algo parecido me ajudaria muito a avançar mais rápido. Eis as estruturas das tabelas. CREATE TABLE SUBESTACOES ( sigla_subest character(2) NOT NULL, nome_subest character varying(30), CONSTRAINT pk-subestacoes PRIMARY KEY (sigla_subest) ) CREATE TABLE DTF_IDS_BARRAS ( id_barra character varying(20) NOT NULL, nome_barra character varying(30), sigla_subest character varying(20), tipo_tensao integer, flag_indicador boolean NOT NULL DEFAULT true, CONSTRAINT pk-dtf-ids-barras PRIMARY KEY (id_barra), CONSTRAINT fk-dtf-ids-barras FOREIGN KEY (sigla_subest) REFERENCES SUBESTACOES (sigla_subest) MATCH SIMPLE ON UPDATE CASCADE ON DELETE NO ACTION ) CREATE TABLE DTF_TENSOES_SUBEST ( id_tensoes_subest serial NOT NULL, id_barra character varying(20) NOT NULL, data_inicio date NOT NULL, data_fim date, CONSTRAINT pk-dtf-tensoes-subest PRIMARY KEY (id_tensoes_subest, data_inicio, id_barra), CONSTRAINT fk-dtf-tensoes-subest FOREIGN KEY (id_barra) REFERENCES DTF_IDS_BARRAS (id_barra) MATCH SIMPLE ON UPDATE CASCADE ON DELETE NO ACTION, CONSTRAINT unique-campo UNIQUE (id_tensoes_subest) ) CREATE TABLE DTF_LIMITES_TENSOES_SUBEST ( id_limites_tensoes_subest serial NOT NULL, id_tensoes_subest integer NOT NULL, id_carga integer, valor_inf real, valor_recom real, valor_sup real, CONSTRAINT pk-dtf-limites-tensoes-subest PRIMARY KEY (id_limites_tensoes_subest), CONSTRAINT fk-dtf-limites-tensoes-subest FOREIGN KEY (id_tensoes_subest) REFERENCES DTF_TENSOES_SUBEST (id_tensoes_subest) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ) CREATE TABLE DTF_FAIXAS_HORARIAS ( id_faixas_horarias serial NOT NULL, id_limites_tensoes_subest integer, id_tipo_dia integer, hora_inicio character varying(8), hora_fim character varying(8), CONSTRAINT pk-dtf-faixas-horarias PRIMARY KEY (id_faixas_horarias), CONSTRAINT fk-dtf-faixas-horarias FOREIGN KEY (id_limites_tensoes_subest) REFERENCES DTF_LIMITES_TENSOES_SUBEST (id_limites_tensoes_subest) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ) Eis os selects que fiz que retornam o resultado esperado. SELECT nome_subest FROM SUBESTACOES WHERE sigla_subest=(SELECT sigla_subest FROM DTF_IDS_BARRAS WHERE nome_barra = barra) INTO var_nome_subest; SELECT data_inicio FROM DTF_TENSOES_SUBEST AS X WHERE X.id_barra = (SELECT id_barra FROM DTF_IDS_BARRAS WHERE nome_barra = barra) INTO var_data_inicio; /*SELECT Y.* FROM DTF_TENSOES_SUBEST AS X, DTF_LIMITES_TENSOES_SUBEST AS Y WHERE X.id_tensoes_subest = (SELECT id_tensoes_subest FROM DTF_TENSOES_SUBEST AS X WHERE X.id_barra = (SELECT id_barra FROM DTF_IDS_BARRAS WHERE nome_barra = barra)) AND X.id_tensoes_subest = Y.id_tensoes_subest;--*/ /*SELECT Z.* FROM DTF_FAIXAS_HORARIAS AS Z WHERE Z.id_limites_tensoes_subest IN (SELECT Y.id_limites_tensoes_subest FROM DTF_TENSOES_SUBEST AS X, DTF_LIMITES_TENSOES_SUBEST AS Y WHERE X.id_tensoes_subest = (SELECT id_tensoes_subest FROM DTF_TENSOES_SUBEST AS X WHERE X.id_barra = (SELECT id_barra FROM DTF_IDS_BARRAS WHERE nome_barra = barra)) AND X.id_tensoes_subest = Y.id_tensoes_subest); -- */ ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Alterar parâmetros de configuraç ão Postgres
Olá comunidade, fiz alterações no postgresql.conf (baseado no artigo http://www.postgresql.org.br/Checklist_de_Performance_do_PostgreSQL_8.0) em alguns parâmetros (shared_buffers, work_mem, maintenance_work_mem) e depois reiniciei o serviço postgres pelo utilitário gráfico de serviços do Linux, porém ele não levantou mais. Tive que retirar a mudança no shared_buffers para o que era (24MB) e reiniciar o Linux para poder subir com o postgres novamente. Como posso alterar esse shared_buffers (como alterar os parametros de inicializaçaõ via linha de comando)? Como deve-se alterar aqueles parâmetros em tempo de execução (arquivo ou linha de comando)? Como faço o autovacuum via linha de comando no linux (quero adicionar essa tarefa no cron)? Preciso fazer isso porque tenho uma consulta mensal que faz cálculos complexos no banco utilizando tabelas de quase um 1GB que está demorando quase 03 horas pra rodar. O servidor aqui da empresa é um CentOS 4.5 e Postgresql 8.2.4 - Processador Xeon FC-LGA 771 dual core Cache 2 4MB e Memória RAM de 04GB. É um servidor dedicado de banco de dados e servidor Web. O banco com que estou trabalhando está atualmente com mais de 100GB e as tabelas que são objeto de cálculo dessa minha função são da ordem superior a 800MB (quase 06 milhões de registros). O banco recebe varias centenas de informações a cada 10 segundos. Com as mudanças que fiz (work_mem, maintenance_work_mem) já notei que o tempo diminuiu. Também já fiz o analize e vacuum via pgadmim. PS: Sei quase nada de Linux. Tõ aprendendo (:) ANTES shared_buffers = 24MB # min 128kB or max_connections*16kB # (change requires restart) #work_mem = 1MB# min 64kB #maintenance_work_mem = 16MB # min 1MB ATUAIS shared_buffers = 24MB work_mem = 64MB maintenance_work_mem = 512MB COMO EU QUERO shared_buffers = 256MB work_mem = 64MB maintenance_work_mem = 512MB ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Alterar parâmetros de configuraç ão Postgres
Dickson, estou enviando em anexo o log do postgresql como você recomendou ( + postgresql.conf e o resultado da execução do pg_config). Fiz o seguinte procedimento: coloquei todos os arquivos de log em um outro diretório (limpei o pg_log). Parei o serviço do postgres, alterei o valor do shared_buffers para 256MB e depois tentei reiniciar o serviço, o que novamente, deu erro. Esse log apresenta apenas essa interação com o postgres. Achei que essas informações estão resumidas - Vocês recomendam eu alterar mais alguma opção nos parâmetros de Erros e Log ? JotaComm, como faço pra saber qual é o tamanho shmmax do kernel do Linux. Tem como saber via postgres? Ou devo executar algum comando Linux para tal? Tem alguma forma de mudar o valor desse parâmetro, que não seja via re-compilação do kernel do SO ? Eu alterei iterativamente o valor do shared_buffer, consegui aumentar até no máximo a 29MB (o anterior era de 24MB). Ache muito pouco haja vista que tenho 04GB de RAM e o servidor é dedicado. Tem como reverter isso? Outra pergunta bem básica, é onde estão os utilitários do postgres e a forma de utilizá-los. Caso eu queria criar e agendar um script que faça backup, análise, vacuum, etc como devo proceder. Pergunto isso, pois quando estou logado como root e tento executar algum desses utilitários, recebo a seguinte mensagem: pg_dump: [arquivador (bd)] conexão com banco de dados root falhou: FATAL: banco de dados root não existe Se tento executar como outro usuário do sistema recebo o mesmo erro. Tento logar como postgres, ele me pede uma senha que não sei. Como usar esses utilitários em scripts? E em geral, dada essas informações sobre meu cenário de trabalho (SO, versão do postgres, carga de trabalho, parâmetros atuais) - Vocês recomendam mais alguma coisa para alterar esses parâmetros? Desculpe o excesso de perguntas - o problema é que tenho que terminar um sistema até segunda feira e não consigo ir para o desenvolvimento enquanto não minimizo esse problemas com o banco. Imaginem uma consulta que leva 03 horas pra terminar. Nem consigo depurar o sistema. Agradeço pela atenção e fico no aguardo. postgresql-2009-03-11_183034.log Description: postgresql-2009-03-11_183034.log postgresql.conf Description: postgresql.conf BINDIR = /usr/bin DOCDIR = /usr/share/doc/pgsql INCLUDEDIR = /usr/include PKGINCLUDEDIR = /usr/include/pgsql INCLUDEDIR-SERVER = /usr/include/pgsql/server LIBDIR = /usr/lib PKGLIBDIR = /usr/lib/pgsql LOCALEDIR = /usr/share/locale MANDIR = /usr/share/man SHAREDIR = /usr/share/pgsql SYSCONFDIR = /etc/sysconfig/pgsql PGXS = /usr/lib/pgsql/pgxs/src/makefiles/pgxs.mk CONFIGURE = '--host=i686-redhat-linux-gnu' '--build=i686-redhat-linux-gnu' '--target=i386-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/usr/com' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--disable-rpath' '--with-perl' '--with-python' '--with-tcl' '--with-tclconfig=/usr/lib' '--with-openssl' '--with-pam' '--with-krb5' '--with-includes=/usr/kerberos/include' '--with-libraries=/usr/kerberos/lib' '--enable-nls' '--enable-thread-safety' '--sysconfdir=/etc/sysconfig/pgsql' '--datadir=/usr/share/pgsql' '--with-docdir=/usr/share/doc' 'CFLAGS=-O2 -g -pipe -march=i386 -mcpu=i686 -I/usr/include/et' 'CPPFLAGS= -I/usr/include/et' 'build_alias=i686-redhat-linux-gnu' 'host_alias=i686-redhat-linux-gnu' 'target_alias=i386-redhat-linux-gnu' CC = gcc CPPFLAGS = -D_GNU_SOURCE -I/usr/kerberos/include CFLAGS = -O2 -g -pipe -march=i386 -mcpu=i686 -I/usr/include/et -Wall -Wmissing-prototypes -Wpointer-arith -Winline -Wdeclaration-after-statement -fno-strict-aliasing CFLAGS_SL = -fpic LDFLAGS = -L/usr/kerberos/lib LDFLAGS_SL = LIBS = -lpgport -lpam -lssl -lcrypto -lkrb5 -lz -lreadline -ltermcap -lcrypt -ldl -lm VERSION = PostgreSQL 8.2.4 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Verificar se um arquivo existe no servidor em PLPGSQL
Olá comunidade, fiz essa função com a ajuda do Sebastian - porém pra ela funcionar perfeitamente preciso testar se um determinado arquivo existe no servidor (em um path determinado). Como faço esse teste com plpgsql ? Não sei programar em Perl e não sei onde está esse adminpack (e pra falar a verdade nem como usar esse modulo contrib e onde está isso no servidor Linux CenT OS) Eis a função - CREATE OR REPLACE FUNCTION fs_existe_tabela_nessa_data(tabela character varying) RETURNS void AS $BODY$ DECLARE pTabela ALIAS FOR $1; sql_copy varchar; sql_createtable varchar; result integer; BEGIN PERFORM true FROM pg_class WHERE relname ilike tabela; IF NOT FOUND THEN --TENHO QUE TESTAR SE ESSE ARQUIVO EXISTE NO SERVIDOR -- COMO FAZER ISSO NO POSTGRES? sql_createtable = 'CREATE TABLE ' || tabela || ' (BH_DTHR TIMESTAMP WITH TIME ZONE, BH_CHAVE INT, BH_VARIACAO INT , FLAG INT, FLAGEST SMALLINT, LINFA REAL, LINFE REAL, LINFU REAL, LSUPA REAL, LSUPE REAL, LSUPU REAL, RESNORM REAL, RGALR SMALLINT, VALEST REAL, VALOR REAL);'; EXECUTE sql_createtable; sql_copy = 'COPY ' || tabela || ' FROM ''/tmp/sage/arqs/' || tabela || '.dados'' DELIMITER '','''; EXECUTE sql_copy; RAISE NOTICE 'Não Encontrei'; ELSE RAISE NOTICE 'Encontrei'; END IF; RETURN; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; ALTER FUNCTION fs_existe_tabela_nessa_data(character varying) OWNER TO sage; ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Função que retorna o resultado de um SELECT não dá certo
Tenho uma função que retorna o resultado de um select. O problema ocorre quando aplico funções nos campos do select, aí retorna o seguinte erro: ERRO: sintaxe de entrada é inválida para integer: 18:53:00 CONTEXTO: PL/pgSQL function fs_disponibilidade_barras_diario line 21 at for over select rows ** Erro ** Para esse select, o retorno ocorre da maneira certa: SELECT * FROM DISPONIBILIDADE_EQ AS X WHERE X.data=data ORDER BY X.id_eq, X.data Para esse outro select dá erro: SELECT X.id_eq, X.data, fs_convertsegundostohora(X.nseg_disp), fs_convertsegundostohora(X.nseg_indisp), CAST(X.disp AS DECIMAL(5,2)), CAST(X.indisp AS DECIMAL(5,2)), X.tolerancia, (SELECT tipo_dia FROM DTF_TIPOS_DIAS AS Y WHERE Y.id_tipo_dia=X.id_tipo_dia) FROM DISPONIBILIDADE_EQ AS X WHERE X.data=data ORDER BY X.id_eq, X.data Eis a função: CREATE OR REPLACE FUNCTION fs_disponibilidade_barras_diario(barra character varying, data date, tolerancia integer) RETURNS SETOF DISPONIBILIDADE_EQ AS $BODY$ DECLARE r_sql_barras RECORD; r DISPONIBILIDADE_EQ%ROWTYPE; numero integer; sql_barras text = ''; id_barra character varying(20); BEGIN IF ( barra = '-1' ) THEN --Exibir para todas as barras em geral SELECT fs_calcular_detalhes_dtf_tipo2('-1', data, tolerancia) INTO numero; ELSE SELECT fs_calcular_detalhes_dtf_tipo2(barra, data, tolerancia) INTO numero; END IF; FOR r IN ( SELECT ) LOOP RETURN NEXT r; END LOOP; RETURN; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; ALTER FUNCTION fs_disponibilidade_barras_diario(character varying, date, integer) OWNER TO sage; Tabela a ser retornada : CREATE TABLE DISPONIBILIDADE_EQ ( id_eq character varying(20) NOT NULL, data date NOT NULL, nseg_disp integer, nseg_indisp integer, disp real, indisp real, tipo_relatorio character varying(20), tolerancia integer, id_tipo_dia integer, CONSTRAINT pk-disponibilidade-eq PRIMARY KEY (id_eq, data) ) WITH (OIDS=FALSE); PS: Não posso utilizar views, haja vista que a função é dinâmica - retorna dados a partir de uma data específica. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Verificar se tabela existe e carregar as q ue não existem através de arquivos no servidor
Ol� comunidade, (Postgres 8.2.4 e Distribui��o CentOS 4.5) Preciso (MUITO) verificar em uma fun��o se uma dada tabela existe no banco. O usu�rio envia uma determinada data pela entrada, a fun��o precisa verificar se essa tabela ainda existe (as tabelas est�o no formato bhpas_h__MM_DD). Se essa tabela n�o estiver on-line, preciso recarregar ela no banco atrav�s de 02 arquivos que est�o no mesmo servidor Linux no path /tmp/sage/arqs. Esse dois arquivos s�o bhpas_h__MM_DD.dados e bhpas_h__MM_DD.sqm; Digamos que o usu�rio quer consultar dados de 06/11/2001; preciso verificar se existe uma tabela no banco chamada de bhpas_h_2001_11_06; Se n�o existir preciso carreg�-la atrav�s dos arquivos bhpas_h_2001_11_06.dados e bhpas_h_2001_11_06.sqm que est�o no path /tmp/sage/arqs. Eis o conte�do de bhpas_h_2001_11_06.sqm: CREATE TABLE bhpas_h_2001_11_06 (BH_DTHR TIMESTAMP WITH TIME ZONE, BH_CHAVE INT, BH_VARIACAO INT , FLAG INT, FLAGEST SMALLINT, LINFA REAL, LINFE REAL, LINFU REAL, LSUPA REAL, LSUPE REAL, LSUPU REAL, RESNORM REAL, RGALR SMALLINT, VALEST REAL, VALOR REAL) CREATE INDEX pas_h_2001_11_06_A_I (bh_chave, bh_dthr) UPDATE BH_pas_h_CTL SET BH_ESTADO='ONLINE', BH_DTHR=SYSTIMESTAMP() WHERE BH_NOME='bhpas_h_2001_11_06'\;\n COPY bhpas_h_2001_11_06 FROM 'bhpas_h_2001_11_06.dados' DELIMITER ',' Uma outra quest�o � que preciso fazer isso dinamicamente. Como fazer um EXECUTE 'SE EXISTE TAL TABELA RETORNE VERDADEIRO' sem que o postgres retorne o seguinte erro: cannot EXECUTE a null querystring ? numa pl... select relname from pg_class where relname = 'nome_da_sua_tabela' and relkind='r'; if not found -- faz tudo o q vc precisa... end if; -- Atenciosamente, Sebastian Selau Webber Colombo Olá comunidade, fiz essa função baseado na dica do Sebastian, porém a mesma apresenta resultados errôneos, tipo, coloco datas que tenho certeza que não existe a tabela bhpas_h__MM_DD e a função retorna que está presente. Acho que o execute tenha alguma coisa a ver com isso (isso também ocorre com o perform). O que tenho que fazer? No aguardo on-line. CREATE OR REPLACE FUNCTION Funcao_para_Testes(data date) RETURNS integer AS $BODY$ DECLARE sql varchar; DECLARE aux varchar; BEGIN aux = replace(CAST(data AS varchar),'-','_'); sql = 'select relname from pg_class where relname = ''bhpas_h_' || aux || ''' and relkind=''r'''; PERFORM sql; IF NOT found THEN raise notice 'tabela NÃO ESTÁ presente - %',sql; ELSE raise notice 'tabela está presente - %',sql; END IF; RETURN 0; END;$BODY$ LANGUAGE 'plpgsql' VOLATILE; SELECT Funcao_para_Testes('2000-02-05'); ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Verificar se tabela existe e carregar as q ue não existem
Sebastian, tem mais um detalhe que preciso me deter – E se o arquivo não existir no servidor? Quando digito uma data que não tem o arquivo correspondente no servidor aparece o seguinte erro: ERRO: não pôde abrir arquivo /tmp/sage/arqs/bhtac_h_1983_02_05.dados para leitura: Arquivo ou diretório não encontrado CONTEXTO: comando SQL COPY bhtac_h_1983_02_05 FROM '/tmp/sage/arqs/bhtac_h_1983_02_05.dados' DELIMITER ',' PL/pgSQL function fs_existe_tabela_nessa_data line 18 at execute statement A função que fiz baseado na tua estar da seguinte forma. Fico no aguardo. CREATE OR REPLACE FUNCTION fs_existe_tabela_nessa_data(tabela varchar) RETURNS void AS $$ DECLARE pTabela ALIAS FOR $1; sql_copy varchar; sql_createtable varchar; result integer; BEGIN PERFORM true FROM pg_class WHERE relname ilike tabela; IF NOT FOUND THEN sql_createtable = 'CREATE TABLE ' || tabela || ' (BH_DTHR TIMESTAMP WITH TIME ZONE, BH_CHAVE INT, BH_VARIACAO INT , FLAG INT, FLAGEST SMALLINT, LINFA REAL, LINFE REAL, LINFU REAL, LSUPA REAL, LSUPE REAL, LSUPU REAL, RESNORM REAL, RGALR SMALLINT, VALEST REAL, VALOR REAL);'; EXECUTE sql_createtable; --TENHO QUE TESTAR SE ESSE ARQUIVO EXISTE NO SERVIDOR -- COMO FAZER ISSO NO POSTGRES? sql_copy = 'COPY ' || tabela || ' FROM ''/tmp/sage/arqs/' || tabela || '.dados'' DELIMITER '','''; EXECUTE sql_copy; RAISE EXCEPTION 'N�O Encontrei'; ELSE RAISE EXCEPTION 'Encontrei'; END IF; RETURN; END; $$ LANGUAGE 'plpgsql' VOLATILE; SELECT fs_existe_tabela_nessa_data('bhpas_h_2001_09_10'); ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Verificar se tabela existe e carregar as que não existem através de arquivos no serv idor
Olá comunidade, (Postgres 8.2.4 e Distribuição CentOS 4.5) Preciso (MUITO) verificar em uma função se uma dada tabela existe no banco. O usuário envia uma determinada data pela entrada, a função precisa verificar se essa tabela ainda existe (as tabelas estão no formato bhpas_h__MM_DD). Se essa tabela não estiver on-line, preciso recarregar ela no banco através de 02 arquivos que estão no mesmo servidor Linux no path /tmp/sage/arqs. Esse dois arquivos são bhpas_h__MM_DD.dados e bhpas_h__MM_DD.sqm; Digamos que o usuário quer consultar dados de 06/11/2001; preciso verificar se existe uma tabela no banco chamada de bhpas_h_2001_11_06; Se não existir preciso carregá-la através dos arquivos bhpas_h_2001_11_06.dados e bhpas_h_2001_11_06.sqm que estão no path /tmp/sage/arqs. Eis o conteúdo de bhpas_h_2001_11_06.sqm: CREATE TABLE bhpas_h_2001_11_06 (BH_DTHR TIMESTAMP WITH TIME ZONE, BH_CHAVE INT, BH_VARIACAO INT , FLAG INT, FLAGEST SMALLINT, LINFA REAL, LINFE REAL, LINFU REAL, LSUPA REAL, LSUPE REAL, LSUPU REAL, RESNORM REAL, RGALR SMALLINT, VALEST REAL, VALOR REAL) CREATE INDEX pas_h_2001_11_06_A_I (bh_chave, bh_dthr) UPDATE BH_pas_h_CTL SET BH_ESTADO='ONLINE', BH_DTHR=SYSTIMESTAMP() WHERE BH_NOME='bhpas_h_2001_11_06'\;\n COPY bhpas_h_2001_11_06 FROM 'bhpas_h_2001_11_06.dados' DELIMITER ',' Uma outra questão é que preciso fazer isso dinamicamente. Como fazer um EXECUTE 'SE EXISTE TAL TABELA RETORNE VERDADEIRO' sem que o postgres retorne o seguinte erro: cannot EXECUTE a null querystring ? Agradeço pela atenção e fico no aguardo. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Ano bissexto
Olá comunidade, como saber se o ano é bissexto? ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Função para converter n segundos para hora no formato HH:MM:SS
Olá comunidade, alguém tem uma função em plpgsql que dado um inteiro nseg (um determinado número de segundos) retorne uma string que representa um horário no formato HH:MM:SS? E ao contrário? Dada uma string HH:MM:SS retorne o nseg? (essa eu acho fácil vou fazer a minha própria - se quiserem comparar com a minha passem ae) Fico no aguardo on-line. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] [RESOLVIDO] Função para defin ir dada como dia ÚTIL, SABADO, DOMINGO e/ou F ERIADO
Muito obrigado Luiz pela ajuda. Eis a função que fiz : CREATE OR REPLACE FUNCTION Categoria_Dia(data date) RETURNS character varying(10) AS $BODY$ DECLARE dia integer; resultado character varying(10); BEGIN dia = extract(dow from data); if resultado = 0 then -- se o dia for um domingo resultado = 'DOMINGO'; elseif resultado = 6 then -- se o dia for um sabado resultado = 'SABADO'; elseif EXISTS (SELECT * FROM FERIADOS AS X WHERE X.data = data) then -- se o dia for um feriado resultado = 'FERIADO'; else -- trata-se de um dia útil resultado = 'DIA UTIL'; end if; return resultado; END; $BODY$ language 'plpgsql'; SELECT Categoria_Dia(CURRENT_DATE); Existe a tabela Feriados que tem a relação dos feriados do ano: CREATE TABLE FERIADOS ( data date NOT NULL, descricao character varying(50) NOT NULL, CONSTRAINT pk-feriados PRIMARY KEY (data, descricao) ) Um grande abraço a todos. Att. Newton Teixeira do Nascimento Junior Analista de Sistemas - CMAO Centrais Elétricas do Norte do Brasil S/A - Eletronorte Av. dos Jequitibás, s/nº - Cohebe do Sacavém São Luís-MA - 65043-380 Tel: 3217-5006 / 81330104 e-mail: newton.jun...@eletronorte.gov.br ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Como transformar um programador em DBA profissional
Olá Comunidade, peço que uma orientação de como posso me tornar um DBA com ênfase em postgres. Gostaria de uma espécie de plano de estudo e/ou estudo orientado (seria interessante se fosse cronometrado). Sou programador de sistemas, mas vou ter que começar a trabalhar profissionalmente com uma base enorme dados em postgres e não tenho idéia de por onde começar estudar. Agradeço pela atenção e fico no aguardo. Att. Newton Teixeira do Nascimento Junior Analista de Sistemas - CMAO Centrais Elétricas do Norte do Brasil S/A - Eletronorte Av. dos Jequitibás, s/nº - Cohebe do Sacavém São Luís-MA - 65043-380 Tel: 3217-5006 / 81330104 e-mail: [EMAIL PROTECTED] ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Caixa de ferramentas de um DBA
Olá comunidade, quais são as ferramentas indispensáveis que um DBA deve ter na sua caixa de trabalho? Peço que citem as ferramentas que vocês utilizam para trabalhar com o postgres profissionalmente (tanto em fase de desenvolvimento quanto na administração do banco). Agradeço pela atenção e fico no aguardo. Att. Newton Teixeira do Nascimento Junior Analista de Sistemas - CMAO Centrais Elétricas do Norte do Brasil S/A - Eletronorte Av. dos Jequitibás, s/nº - Cohebe do Sacavém São Luís-MA - 65043-380 Tel: 3217-5006 / 81330104 e-mail: [EMAIL PROTECTED] ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] As diferenças entre as versões do padrão SQL
Olá comunidade, precisei fazer um trabalho na faculdade sobre as diferentes versões da linguagem SQL. Gostaria de saber as seguintes coisas: - Quais as diferenças dos comandos SQL em todas as versões dessa linguagem (1986,1989,1992,1999,2003), principalmente a versão 1999 e a de 2003; - Quais os comandos e/ou versões que os principais SGBD's (incluindo o postgres) de fatos implementam e usam segundo o padrão ANSI/ISSO; Agradeço pela atenção e fico no aguardo. Newton Teixeira do Nascimento Junior Analista de Sistemas - CMAO Centrais Elétricas do Norte do Brasil S/A - Eletronorte Av. dos Jequitibás, s/nº - Cohebe do Sacavém São Luís-MA - 65043-380 Tel: 3217-5006 / 81330104 e-mail: [EMAIL PROTECTED] ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Manipulação com tipo de dados timestamp with time zone dando erro
Senhores, muito obrigado pela atenção e pelas respostas. O Jota indicou a seguinte solução: select data from tabela where to_char(data,'DD/MM/')='19-06-2008'; Pergunta: Como fazer a data (no formato timestamp with time zone) 2008-06-19 16:32:18-03 se transformar em 19-06-2008 ??? Agradeço pelas dicas e fico no aguardo. Att. Newton Teixeira do Nascimento Junior Analista de Sistemas - CMAO Centrais Elétricas do Norte do Brasil S/A - Eletronorte Av. dos Jequitibás, s/nº - Cohebe do Sacavém São Luís-MA - 65043-380 Tel: 3217-5006 / 81330104 e-mail: [EMAIL PROTECTED] ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Manipulação com tipo de dados timestamp with time zone dando erro
Olá comunidade. Estou desenvolvendo uma função que recebe dois parâmetros: nome da estação (que é uma sigla) e a data do relatório. Preciso comparar uma data selecionada pelo usuário (no formato dd/mm/) com a data que está na tabela pas_r no formato timestamp with time zone (ex: 2008-04-14 16:32:18-03). Tentei rodar a função, mas plpgsql não aceitou a sintaxe. PROBLEMA: - Minha função não roda; já fica no parse da sintaxe. O que está errado? Como corrigir? Existe uma forma melhor? DÚVIDAS: - Como faço para extrair apenas a data do formato timestamp with time zone ? Ou a única forma é fazer como estou tentando fazer (ex: EXTRACT(DAY FROM TIMESTAMP WITH TIME ZONE record2.bh_dthr_ini) = dia) - Como faço para comparar datas? Em qual formato devo fazer isso, pois o usuário entra com a data dd/mm/ e data na pas_r está formato -mm-dd. Qual é a melhor forma de comparar essas informações caso eu consiga extrair a data de record2.bh_dthr_ini. Pesquisei na lista e procurei na doc, porém não consegui resolver. Peço ajuda da comunidade, pois estou começando a usar esse SGBD. No aguardo online e agradeço pela atenção. http://www.postgresql.org/docs/8.2/interactive/functions-datetime.html http://www.postgresql.org/docs/8.2/interactive/functions-formatting.html CREATE OR REPLACE FUNCTION aux(character, date) RETURNS integer AS $BODY$ DECLARE record1 RECORD; record2 RECORD; subestacao ALIAS FOR $1; data ALIAS FOR $2; dia float; mes float; ano float; BEGIN dia := 17; mes := 6; ano := 2008; --dia := FUNCAO_PARA_EXTRAIR_DIA_DE_DATA(); --mes := FUNCAO_PARA_EXTRAIR_MES_DE_DATA(); --ano := FUNCAO_PARA_EXTRAIR_ANO_DE_DATA(); FOR record1 IN SELECT * FROM subest-equi LOOP FOR record2 IN SELECT * FROM pas_r WHERE id = record1.id-equip AND EXTRACT(DAY FROM TIMESTAMP WITH TIME ZONE record2.bh_dthr_ini) = dia AND EXTRACT(MONTH FROM TIMESTAMP WITH TIME ZONE record2.bh_dthr_ini) = mes AND EXTRACT(YEAR FROM TIMESTAMP WITH TIME ZONE record2.bh_dthr_ini) = ano LOOP RAISE NOTICE 'Saida %',record2.id; END LOOP; END LOOP; RETURN 1; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; ALTER FUNCTION aux(character, date) OWNER TO postgres; CREATE TABLE subest-equi ( subest-nome character varying(10) NOT NULL, id-equip character varying(20) NOT NULL, nome-equip character varying(20) NOT NULL, flag bit(1), CONSTRAINT primary-key PRIMARY KEY (subest-nome, id-equip) ) WITH (OIDS=FALSE); ALTER TABLE subest-equi OWNER TO sage; CREATE TABLE pas_r ( bh_dthr_ini timestamp with time zone, bh_dthr_fim timestamp with time zone, bh_sinonimo integer, bh_chave integer, bh_indtr integer, eqp character(18), estacao character(12), histper smallint, id character(24), nome character(42), tac character(12), tipoe smallint, tpeqp smallint ) WITH (OIDS=FALSE) TABLESPACE sagebhref; ALTER TABLE pas_r OWNER TO sage; Newton Teixeira do Nascimento Junior ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Função que acessa o banco Y a par tir do banco X
Olá Comunidade. Tenho uma função (Obter_Leituras_Equip) em um banco de dados X. Preciso que essa função verifique se existe os dados em uma dada tabela T1 dentro de (X); se não existir dados para a chave primaria fornecida, a função selecionaria esses dados de uma tabela T que está em outro banco de dados (Y) e inseriria os mesmos no banco (X) na tabela T1 e devolveria o resultado para a aplicação. Ambos os bancos (X) e (Y) estão na mesma máquina e o banco é postgresql 8.2.4. Há como fazer isso? No aguardo. Newton Teixeira do Nascimento Junior Analista de Sistemas - CMAO Centrais Elétricas do Norte do Brasil S/A - Eletronorte Av. dos Jequitibás, s/nº - Cohebe do Sacavém São Luís-MA - 65043-380 Tel: 3217-5006 / 81330104 e-mail: [EMAIL PROTECTED] ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Como pesquisar nessa lista de e-mail?
Olá comunidade desculpe minha possível ignorância, mas não há uma forma mais eficiente de procurar por pergunta-respostas nesta lista? Ou temos mesmo que baixar os -mês-txt.gz e procurar no control + F mesmo. Att. Newton Teixeira do Nascimento Junior Analista de Sistemas ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Arquivos de Configuração - Postgr es / Apache / Samba
Caros colegas, vou começar a trabalhar com o seguinte ambiente de produção: CenOS+Apache+Postgres (Rede A) e acessando as informações dos mesmos da minha máquina local Windows (Rede B). Perguntas: 1 - Onde obter tutoriais e/ou artigos sobre os arquivos de configuração do Apache, Samba e Postgres em portugues ou em inglês de maneira detalhada e explicativa? 2 - A versão do postgresql que vou trabalhar é 8.2.4. Quais são as diferenças entre essa versão e a versão mais nova 8.3? 3 - Existe algum quadro comparativo entre as versões do postgres? Agradeço a atenção e fico no aguardo online. Newton Teixeira do Nascimento Junior Analista de Sistemas - CMAO Centrais Elétricas do Norte do Brasil S/A - Eletronorte Av. dos Jequitibás, s/nº - Cohebe do Sacavém São Luís-MA - 65043-380 Tel: 3217-5006 / 81330104 e-mail: [EMAIL PROTECTED] ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Postgres e Linguagem C
Olá pessoal, como faço para escrever funções, procedures, triggers em linguagem C dentro do postgres? É possível fazer isso pra outras linguagens como Java e c++? Peço links, tutoriais, artigos, pdfs. Obrigado pela atenção e fico no aguardo online. T+ Newton Teixeira do Nascimento Junior Analista de Sistemas - CMAO Centrais Elétricas do Norte do Brasil S/A - Eletronorte Av. dos Jequitibás, s/nº - Cohebe do Sacavém São Luís-MA - 65043-380 Tel: 3217-5006 / 81330104 e-mail: [EMAIL PROTECTED] ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Estrutura do PostgreSql no Linux CentOS 4
Pessoal, gostaria de conhecer mais profundamente como o postgresql é estruturado no linux, ou seja, que pastas são criadas e onde, para que servem (o que armazenam), quais variáveis de ambiente são criadas, portas, usuários do banco, interação e/ou influência com outros programas, o que é capaz de derrubar o servidor, etc. Preciso saber com detalhes pois estou instalando o PostgreSQL 8.1 no CentOS 4 e estou com dificuldades : Fiz o seguinte script porém o servidor não inicializa. Gostaria de lembrar que não posso trocar de versão de postgres; tem que ser esse mesmo. Fico no agurado e agradeço a atenção. #!/bin/bash echo Inicializando o script de instalação do postgresql echo echo LISTANDO OS PACOTES POSTGRES ATUAIS rpm -qa | grep postgres echo echo REMOVENDO OS PACOTES ATUAIS echo rpm -e --nodeps postgresql-pl rpm -e --nodeps postgresql-tcl rpm -e --nodeps postgresql-python rpm -e --nodeps postgresql-jdbc rpm -e --nodeps postgresql-odbc rpm -e --nodeps postgresql-docs rpm -e --nodeps postgresql-devel rpm -e --nodeps postgresql-contrib rpm -e --nodeps postgresql-server rpm -e --nodeps postgresql rpm -e --nodeps postgresql-libs rpm -e --nodeps postgresql-test echo echo INSTALANDO OS PACOTES NOVOS echo rpm -ihv postgresql-libs-8.1.9-1PGDG.i686.rpm rpm -ihv postgresql-8.1.9-1PGDG.i686.rpm rpm -ihv postgresql-server-8.1.9-1PGDG.i686.rpm rpm -ihv postgresql-contrib-8.1.9-1PGDG.i686.rpm rpm -ihv postgresql-devel-8.1.9-1PGDG.i686.rpm rpm -ihv postgresql-docs-8.1.9-1PGDG.i686.rpm echo echo CONFIGURANDO OS SERVICOS echo /sbin/chkconfig postgresql on /sbin/service postgresql start Newton Teixeira do Nascimento Junior Analista de Sistemas - CMAO Centrais Elétricas do Norte do Brasil S/A - Eletronorte Av. dos Jequitibás, s/nº - Cohebe do Sacavém São Luís-MA - 65043-380 Tel: 3217-5006 / 81330104 e-mail: [EMAIL PROTECTED] html body font face = arial size = 1 color = #80Aviso:brO emitente desta mensagem eacute; responsaacute;vel por seu conteuacute;do e endereccedil;amento. Cabe ao destinataacute;rio cuidar quanto ao tratamento adequado. Sem a devida autorizaccedil;atilde;o, a divulgaccedil;atilde;o, a reproduccedil;atilde;o, a distribuiccedil;atilde;o ou qualquer outra accedil;atilde;o em desconformidade com as normas internas da ELETRONORTE S/A satilde;o proibidas e passiacute;veis de sanccedil;atilde;o disciplinar, ciacute;vel e criminal. Esta mensagem pode ser monitorada. brNotice:brThe sender of this message is responsible for its content and addressing. The receiver shall take proper care of it. Without due authorization, the publication, reproduction, distribution or the performance of any other action not conforming to ELETRONORTE S/A internal policies and procedures is forbidden and liable to disciplinary, civil or criminal sanctions. This message can be monitored./font /body /html___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Mineração de Dados
Olá pessoal, sou recém chegado à lista de discussão. Gostaria de saber como posso fazer mineração de dados em BD postgresql. Alguém tem experiência nisso ou sabe de softwares para tal finalidade? Um grande abraço e aguardo respostas. T+ Newton Teixeira do Nascimento Junior Analista de Sistemas - CMAO Centrais Elétricas do Norte do Brasil S/A - Eletronorte Av. dos Jequitibás, s/nº - Cohebe do Sacavém São Luís-MA - 65043-380 Tel: 3217-5006 e-mail: [EMAIL PROTECTED] html body font face = arial size = 1 color = #80Aviso:brO emitente desta mensagem eacute; responsaacute;vel por seu conteuacute;do e endereccedil;amento. Cabe ao destinataacute;rio cuidar quanto ao tratamento adequado. Sem a devida autorizaccedil;atilde;o, a divulgaccedil;atilde;o, a reproduccedil;atilde;o, a distribuiccedil;atilde;o ou qualquer outra accedil;atilde;o em desconformidade com as normas internas da ELETRONORTE S/A satilde;o proibidas e passiacute;veis de sanccedil;atilde;o disciplinar, ciacute;vel e criminal. Esta mensagem pode ser monitorada. brNotice:brThe sender of this message is responsible for its content and addressing. The receiver shall take proper care of it. Without due authorization, the publication, reproduction, distribution or the performance of any other action not conforming to ELETRONORTE S/A internal policies and procedures is forbidden and liable to disciplinary, civil or criminal sanctions. This message can be monitored./font /body /html___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral