Re: [pgbr-geral] Inserção de grandes volumes
Em 17 de março de 2010 09:58, Jesus Rodrigues jesusrodrigu...@gmail.com escreveu: Isso mesmo, Tenho a restrição de utilizar um único arquivo. Resposta rápida: Expressões Regulares Resposta de Consultor: Depende do formato do arquivo Minha resposta: * Se o seu problema é que o arquivo já vem com os dados misturados, e se você estiver em um sistema UNIX... então pode utilizar coisas como SED e AWK com auxílio de expressões regulares (REGEX para os íntimos) para separar os registros do seu arquivo e só então importa-los para o banco. * Se não estiver em UNIX, pode criar uma tabela intermediária com um único campo TEXT e importar cada registro lá. Depois você pode utilizar consultas com REGEX que o Postgres tem suporte para separar os registros cada um em sua tabela. Uma variação seria utilizar uma tabela externa e fazer o banco ler diretamente o arquivo TXT. Existem casos mais complexos onde é preciso fazer validações, condicionais etc. Tem arquivos de banco e programas do governo onde os arquivos TXT são uma verdadeira zona. Se fossem XML... aí seria mais fácil. Nestes casos você tem de apelar para o PL mesmo. Mas se os arquivos forem muito grandes, você vai precisar testar bem para a sua carga não levar uma eternidade. Isso pode exigir um pouco mais de habilidade com PL. Espero ter ajudado. []s Fábio Telles Obrigado pela ajuda! Se alguém da lista tiver mais alguma ideia: Como carregar múltiplas tabelas utilizando um único arquivo para o pgloader? []s Em 17 de março de 2010 09:52, JotaComm jota.c...@gmail.com escreveu: Olá, Em 17 de março de 2010 09:46, Jesus Rodrigues jesusrodrigu...@gmail.com escreveu: Conforme disse entendi a ideia de usar o loader, Contudo vc usa dois arquivos arquivo_tabela1.txt e arquivo_tabela2.txt. Minha pergunta era: Séria possível utilizar um único arquivo? Acho que agora entendi o que você quis dizer :) Na verdade eu teria um arquivo que chamaria os arquivos contendo os dados das tabelas, neste caso poderiam ser vários arquivos, um para cada tabela. E a sua dúvida é, ter todos os dados em um único arquivo e carregar este arquivo, até onde eu sei isso não seria possível, pois não vejo como interpretar quando termina os dados de uma tabela e quando começam os dados do próxima tabela. Obrigado Em 17 de março de 2010 09:34, JotaComm jota.c...@gmail.com escreveu: Olá, Em 17 de março de 2010 09:21, Jesus Rodrigues jesusrodrigu...@gmail.com escreveu: JotaComm, Ok posso usar o pgloader. Entretanto, não consigo imaginar como carregar dados para duas tabela A e B utilizando um unico arquivo. Imagine, a chave de A é colocada em B, ok. Ex: A1 A2 B1,A1 B2,A1 B3,A1 B1,A2 Como o banco saberia que A1 tem os filhos ( B1, B2, B3)? Usar o loader é tranquilo, mas não vejo uma forma de orgazinar a estrutura das tabelas em um unico arquivo, principalmente ser for um modelo mais complexo. Segundo o que você falou sua dúvida era como carregar dados para duas tabelas, vamos ao exemplo bem simples. CREATE TABLE tab1(codigo INTEGER PRIMARY KEY); CREATE TABLE tab2(codigo INTEGER PRIMARY KEY,codigo_tab01 INTEGER REFERENCES tab1); Arquivo a ser carregado: COPY tab1 FROM '/tmp/arquivo_tabela1.txt' WITH DELIMITER ';' NULL AS ''; COPY tab2 FROM '/tmp/arquivo_tabela2.txt' WITH DELIMITER ';' NULL AS ''; Abs Em 17 de março de 2010 08:51, JotaComm jota.c...@gmail.com escreveu: Olá, Em 17 de março de 2010 08:32, Jesus Rodrigues jesusrodrigu...@gmail.com escreveu: Pessoal, Preciso realizar carga de grandes volumes em banco postgre. Segue um exemplo do problema. Uma correção, o nome do banco não é Postgre e sim Postgres ou PostgreSQL. Tenho duas tabela A e B, em que A contém múltiplas ocorrências de B (1 para N). Gostaria de carregar essas tabelas via loader, semelhante ao comando existente no oracle. Meu modelo é mais complexo, mas esse foi apenas um pequeno exemplo. Pergunta-se: 1º Existe um processo de carga semelhante (carga via loader) no postgre? Você quer carregar os dados de duas tabelas para um banco é isso? De uma olhada no pgloader [1] [1] http://pgloader.projects.postgresql.org/ 2º É possível carregar as duas tabelas (A e B) utilizando um único arquivo? Por exemplo, se esse arquivo tiver os dados estruturados em forma de um xml ou de forma hierárquica. Ou é necessário possuir dois arquivos, uma para os dados da tabela A e outro para os dados da tabela B? Pode ser um arquivo para carregar as duas tabelas. 3º Para carga de grandes volumes, um processo via loader é mais eficiente que um processo de inserção “normal” (abre transação, insere tudo, commit, fecha fecha transação)? Obrigado, ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral []s -- JotaComm http://jotacomm.wordpress.com
[pgbr-geral] Insert Condicional..
Pessoal como eu montaria uma trigger/constraint para criar a seguinte regra. Tabela A Codigo Nome Tabela B Codigo Data Somente inseri registros na tabela A se existir o Codigo na Tabela B. Não pode ser através de FK, pq a Tabela B é zerada a cada 2 horas. Pensei em montar um trigger mas não sei como pegar o retorno do select e o que informar no return. Se alguém puder me cantar a pedra. rsrsrsrs -- []s Nilson Chagas - Ubuntu User 25794 --- Visite: http://www.avozdoevangelho.com.br - Peça gratuitamente um curso Bíblico Twitter: avozdoevangelho Twitter: matrixspnet http://www.amados.com.br http://bbnradio.org - Ouça a rádio e faça gratuitamente um Curso Biblico On-Line ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] PostgreSQL Distribuido
Boa noite galera, estou fazendo um tcc ( trabalho de conclusão de curso ) sobre Banco de Dados Distribuídos, e pensei em utilizar o PostgreSQL pois já venho utilizando ele a muito tempo. Infelizmente não encontrei muito sobre o assunto no google, gostaria de ajuda. Obrigado, Julio___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Insert Condicional..
Em 18 de março de 2010 21:31, Nilson Chagas nilson.chagas.si...@gmail.com escreveu: Pessoal como eu montaria uma trigger/constraint para criar a seguinte regra. Tabela A Codigo Nome Tabela B Codigo Data Somente inseri registros na tabela A se existir o Codigo na Tabela B. Não pode ser através de FK, pq a Tabela B é zerada a cada 2 horas. Pensei em montar um trigger mas não sei como pegar o retorno do select e o que informar no return. Se alguém puder me cantar a pedra. rsrsrsrs Não entendi muito bem o que você quer, mas para não passar em branco o cantar da pedra vai aqui um exemplo do que eu pude entender. --- postgres=# CREATE TEMP TABLE a (codigo int, nome varchar); CREATE TABLE postgres=# CREATE TEMP TABLE b (codigo int, data date); CREATE TABLE postgres=# INSERT INTO b VALUES (1,'2001/10/09'); INSERT 0 1 postgres=# INSERT INTO b VALUES (2,'2002/10/09'); INSERT 0 1 postgres=# INSERT INTO b VALUES (3,'2002/11/09'); INSERT 0 1 postgres=# INSERT INTO b VALUES (4,'2010/01/09'); INSERT 0 1 postgres=# INSERT INTO a SELECT 1, 'JOAO' FROM B WHERE 1=b.codigo; INSERT 0 1 postgres=# INSERT INTO a SELECT 5, 'PEDRO' FROM B WHERE 5=b.codigo; INSERT 0 0 postgres=# INSERT INTO a SELECT 4, 'MARIA' FROM B WHERE 4=b.codigo; INSERT 0 1 postgres=# SELECT * from b; codigo |data + 1 | 2001-10-09 2 | 2002-10-09 3 | 2002-11-09 4 | 2010-01-09 (4 linhas) postgres=# SELECT * from a; codigo | nome +--- 1 | JOAO 4 | MARIA (2 linhas) --- []s Dickson S. Guedes mail/xmpp: gue...@guedesoft.net - skype: guediz http://guedesoft.net - http://www.postgresql.org.br ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Insert Condicional..
Olá, Em 18 de março de 2010 21:31, Nilson Chagas nilson.chagas.si...@gmail.comescreveu: Pessoal como eu montaria uma trigger/constraint para criar a seguinte regra. Tabela A Codigo Nome Tabela B Codigo Data Somente inseri registros na tabela A se existir o Codigo na Tabela B. Não pode ser através de FK, pq a Tabela B é zerada a cada 2 horas. Pensei em montar um trigger mas não sei como pegar o retorno do select e o que informar no return. Se alguém puder me cantar a pedra. rsrsrsrs Também não entendi muito bem o que vocẽ deseja. Veja se é mais ou menos isso que vocẽ quer: CREATE TABLE tab1(codigo INTEGER PRIMARY KEY,nome VARCHAR(30)); CREATE TABLE tab2(codigo INTEGER PRIMARY KEY,nome VARCHAR(20),data TIMESTAMP WITHOUT TIME ZONE); CREATE OR REPLACE RULE exemplo_regra AS ON INSERT TO tab2 DO INSERT INTO tab1 VALUES (NEW.codigo,NEW.nome); postgres=# INSERT INTO tab2 VALUES (1,'JP',current_timestamp); INSERT 0 1 postgres=# SELECT * FROM tab2; codigo | nome |data +--+ 1 | JP | 2010-03-18 23:37:08.132421 (1 row) postgres=# SELECT * FROM tab1; codigo | nome +-- 1 | JP (1 row) -- []s Nilson Chagas - Ubuntu User 25794 --- Visite: http://www.avozdoevangelho.com.br - Peça gratuitamente um curso Bíblico Twitter: avozdoevangelho Twitter: matrixspnet http://www.amados.com.br http://bbnradio.org - Ouça a rádio e faça gratuitamente um Curso Biblico On-Line ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral []s -- JotaComm http://jotacomm.wordpress.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] PostgreSQL Distribuido
Olá, Em 18 de março de 2010 22:17, Julio C. Gava julio_...@terra.com.brescreveu: Boa noite galera, estou fazendo um tcc ( trabalho de conclusão de curso ) sobre Banco de Dados Distribuídos, e pensei em utilizar o PostgreSQL pois já venho utilizando ele a muito tempo. Infelizmente não encontrei muito sobre o assunto no google, gostaria de ajuda. Vocẽ quer dizer sobre PostgreSQL Distribuído? Ou sobre PostgreSQL? Obrigado, Julio ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral []s -- JotaComm http://jotacomm.wordpress.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] PostgreSQL Distribuido
PostgreSQL Distribuido From: JotaComm Sent: Thursday, March 18, 2010 11:39 PM To: Comunidade PostgreSQL Brasileira Subject: Re: [pgbr-geral] PostgreSQL Distribuido Olá, Em 18 de março de 2010 22:17, Julio C. Gava julio_...@terra.com.br escreveu: Boa noite galera, estou fazendo um tcc ( trabalho de conclusão de curso ) sobre Banco de Dados Distribuídos, e pensei em utilizar o PostgreSQL pois já venho utilizando ele a muito tempo. Infelizmente não encontrei muito sobre o assunto no google, gostaria de ajuda. Vocẽ quer dizer sobre PostgreSQL Distribuído? Ou sobre PostgreSQL? Obrigado, Julio ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral []s -- JotaComm http://jotacomm.wordpress.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral