[pgbr-geral] OFF-TOPIC - Executar pg_dump parametrizado por data a partir de um shell-script

2010-05-03 Por tôpico Newton Teixeira do Nascimento Júnior
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

2010-04-26 Por tôpico Newton Teixeira do Nascimento Júnior
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 ] ?

2010-01-22 Por tôpico Newton Teixeira do Nascimento Júnior

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

2010-01-18 Por tôpico Newton Teixeira do Nascimento Júnior

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

2010-01-15 Por tôpico Newton Teixeira do Nascimento Júnior

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

2009-10-23 Por tôpico Newton Teixeira do Nascimento Júnior

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

2009-10-07 Por tôpico Newton Teixeira do Nascimento Júnior

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 ?

2009-08-19 Por tôpico Newton Teixeira do Nascimento Júnior

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

2009-08-19 Por tôpico Newton Teixeira do Nascimento Júnior

 

  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

2009-06-25 Por tôpico Newton Teixeira do Nascimento Júnior

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

2009-06-24 Por tôpico Newton Teixeira do Nascimento Júnior

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

2009-06-18 Por tôpico Newton Teixeira do Nascimento Júnior

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

2009-06-18 Por tôpico Newton Teixeira do Nascimento Júnior

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

2009-06-18 Por tôpico Newton Teixeira do Nascimento Júnior

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

2009-05-18 Por tôpico Newton Teixeira do Nascimento Júnior

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

2009-05-18 Por tôpico Newton Teixeira do Nascimento Júnior

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

2009-05-18 Por tôpico Newton Teixeira do Nascimento Júnior

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

2009-05-11 Por tôpico Newton Teixeira do Nascimento Júnior

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

2009-05-08 Por tôpico Newton Teixeira do Nascimento Júnior

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

2009-04-17 Por tôpico Newton Teixeira do Nascimento Júnior

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

2009-04-07 Por tôpico Newton Teixeira do Nascimento Júnior
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

2009-04-07 Por tôpico Newton Teixeira do Nascimento Júnior
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

2009-04-02 Por tôpico Newton Teixeira do Nascimento Júnior
 

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

2009-04-02 Por tôpico Newton Teixeira do Nascimento Júnior
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

2009-03-19 Por tôpico Newton Teixeira do Nascimento Júnior
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

2009-03-19 Por tôpico Newton Teixeira do Nascimento Júnior
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

2009-03-11 Por tôpico Newton Teixeira do Nascimento Júnior
 

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

2009-03-11 Por tôpico Newton Teixeira do Nascimento Júnior
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

2009-03-05 Por tôpico Newton Teixeira do Nascimento Júnior
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

2009-02-27 Por tôpico Newton Teixeira do Nascimento Júnior
 

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

2009-02-27 Por tôpico Newton Teixeira do Nascimento Júnior
 

 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

2009-02-27 Por tôpico Newton Teixeira do Nascimento Júnior
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

2009-02-20 Por tôpico Newton Teixeira do Nascimento Júnior
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

2009-02-16 Por tôpico Newton Teixeira do Nascimento Júnior
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

2009-02-13 Por tôpico Newton Teixeira do Nascimento Júnior
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

2009-02-03 Por tôpico Newton Teixeira do Nascimento Júnior
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

2008-08-31 Por tôpico Newton Teixeira do Nascimento Júnior
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

2008-08-31 Por tôpico Newton Teixeira do Nascimento Júnior
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

2008-08-31 Por tôpico Newton Teixeira do Nascimento Júnior
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

2008-06-19 Por tôpico Newton Teixeira do Nascimento Júnior
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

2008-06-18 Por tôpico Newton Teixeira do Nascimento Júnior
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

2008-06-12 Por tôpico Newton Teixeira do Nascimento Júnior
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?

2008-06-08 Por tôpico Newton Teixeira do Nascimento Júnior
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

2008-04-23 Por tôpico Newton Teixeira do Nascimento Júnior
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

2008-04-23 Por tôpico Newton Teixeira do Nascimento Júnior
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

2008-02-28 Por tôpico Newton Teixeira do Nascimento Júnior

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

2008-01-04 Por tôpico Newton Teixeira do Nascimento Júnior

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