Estratégia para popular tabela do Postgres via arquivo

1. Estratégia para popular tabela do Postgres via arquivo

Newton Teixeira
Newtonjr.

(usa CentOS)

Enviado em 10/04/2013 - 15:47h

Olá comunidade, preciso de uma estratégia para popular uma tabela no Postgres 8.2.

Existe um sistema na empresa que exibe alarmes de equipamentos.
Os alarmes de N equipamentos são emitidos entre 2 a 10 segundos gerando uma gama diária de 8 mil a 15 mil alarmes.
Esses alarmes são registrados em um arquivo que vai aumentando de tamanho ao longo do dia.
Para cada dia, um arquivo de alarmes é gerado.

Criei um banco que armazena os alarmes desses arquivos.
Fiz um código em C trata os arquivos diários (até o dia anterior) e cria tabelas diárias com os alarmes.
A questão é como alimentar a tabela do dia atual haja vista que o arquivo vai sendo preenchido em segundo com X alarmes.

Que estratégias devo usar? O sistema (dos arquivos) funciona em Cento 4.2. O sistema e o banco estão em computadores diferentes.
Não tenho muito conhecimento de Linux.

No aguardo. Att.



  


2. Re: Estratégia para popular tabela do Postgres via arquivo

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 10/04/2013 - 17:27h

Vc quer alimentar um arquivo texto do qual está sendo usando pela aplicação?


3. Re: Estratégia para popular tabela do Postgres via arquivo

Newton Teixeira
Newtonjr.

(usa CentOS)

Enviado em 11/04/2013 - 14:14h

alexandregms escreveu:

Vc quer alimentar um arquivo texto do qual está sendo usando pela aplicação?


Preciso alimentar uma tabela de banco de dados a partir de um arquivo cujo conteudo está aumentando a cada 5 segundos.

Como fazer isso da melhor forma possivel?




4. Re: Estratégia para popular tabela do Postgres via arquivo

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 12/04/2013 - 12:28h

Tem algum problema se vc limpar o arquivo, para as demais rotinas?

Pois vc pode usar o psql (cliente do postgres), então criar um script que ler este arquivo de tempos em tempos pegando seu conteúdo e inserindo diretamente na tabela correspondente (usando o psql), depois limpa o arquivo, para que na próxima execução os dados não sejam novamente copiados.

Você pode colocar uma marcação (um x no inicio da linha) para indicar que aquela linha já foi copiada ;-)


Bom, poste um exemplo do arquivo e da tabela que vc criou, assim fica mais fácil ajudar.




5. Re: Estratégia para popular tabela do Postgres via arquivo

Newton Teixeira
Newtonjr.

(usa CentOS)

Enviado em 12/04/2013 - 15:19h

Eis o formato do arquivo :

00:00:18 PDTF605ONS8211B3 Outras Funções Normal [102 URG]
00:00:38 PDTF605ONS8211B1 Sobrecor Normal [584 URG]
00:01:41 PRSD206P00 PRSD2-06 Posição Intermediária Normal [133 URG]
00:01:41 PRSD207P00 PRSD2-07 Posição Intermediária Normal [133 URG]
00:01:42 PRSD206P00 PRSD2-06 Posição Intermediária Alarme [134]
00:01:42 PRSD207P00 PRSD2-07 Posição Intermediária Alarme [134]
00:02:08 PDTF605ONS8211B3 Outras Funções Normal [103 URG]
00:02:55 IZLT6016HYHR2 IZPF-LT6-01 Falha Comunic Rede 2 UCD1-6HY Alarme [45]
00:02:56 IZLT6016HYHR2 IZPF-LT6-01 Falha Comunic Rede 2 UCD1-6HY Normal [46 URG]
00:03:23 IZLT6016HYHR2 IZPF-LT6-01 Falha Comunic Rede 2 UCD1-6HY Normal [47 URG]
00:03:28 PDTF605ONS8211B3 Outras Funções Normal [104 URG]


A cada N segundos X alarmes aparecem. Não posso fazer nada no arquivo a não ser lê-lo.

Como alimentar a tabela do banco de dados Postgresql 8.2 como esses alarmes da melhor maneira possivel? Como ficaria esse script shell linux (CentOs 4.5)?

Eis o esquema da tabela no banco:

CREATE TABLE tmp.abr1113_alr
(
data date,
horario time without time zone,
idalrm character varying(30),
nome_equip character varying(40),
descricao character varying(60),
tipo character varying(50),
ocorrencia character varying(30),
sig_subest character varying(10),
formatacaook boolean
);






6. Re: Estratégia para popular tabela do Postgres via arquivo

Paulo
paulo1205

(usa Ubuntu)

Enviado em 12/04/2013 - 18:13h

Você pode receber as linhas à media que elas forem sendo colocadas no arquivo de logs fazendo um "tail -f" nesse arquivo (ou "tail -F", se o arquivo eventualmente sofre rotação) . Se você fizer algo como

exec 3< <(tail -F /caminho_do_arquivo_de_logs)

while read col1 col2 col3 ... coln <&3; do
# roda psql com uma query que alimenta o banco com os valores
# lidos de col1, col2, col3, ..., coln na ultima linha.
done

exec 3<&-


vai alimentando o banco na medida em que as linhas forem chegando ao log.


7. Re: Estratégia para popular tabela do Postgres via arquivo

Newton Teixeira
Newtonjr.

(usa CentOS)

Enviado em 12/04/2013 - 18:28h


Qual é a melhor forma de saber quais foram as linhas que ja foram enviadas para o banco e quais não foram?

Quero escalonar um script no servidor onde está o arquivo.txt de alarmes para rodar a cada minuto. E nesse minuto N novos alarmes podem ter chegado inclusive nenhum.

Podem me ajudar a montar esse scritp? Não sou expert em shell e nem linux.

Grato pela ajuda. Att.


8. Re: Estratégia para popular tabela do Postgres via arquivo

Paulo
paulo1205

(usa Ubuntu)

Enviado em 12/04/2013 - 18:42h

Não rode de minuto em minuto. Deixe rodando direto, como eu mostrei acima, alimentando o banco on-line.

Fazendo preiodicamente, fica muito difícil garantir que você não terá eventos perdidos.


9. Re: Estratégia para popular tabela do Postgres via arquivo

Newton Teixeira
Newtonjr.

(usa CentOS)

Enviado em 15/04/2013 - 12:29h


Vou implementar em script e dou um retorno aqui no VOL pra vê se deu certo.

Obrigado a todos. Abraço.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts