Re: [pgbr-geral] Instalação silenciosa
Em 9 de março de 2010 07:43, Pedro B. Alves pedroalve...@gmail.comescreveu: Pessoal estou tentando fazer um instalador para nossos sistemas, mas me deparei com a instalação do banco. Alguém poderia me dar uma ajuda para fazer o script de instalação do postgresql? Como vc não mencionou a versão do PostgreSQL suponho que estejas utilizando a última versão estável (8.4), então vc encontrará as informações que precisa em [1]. [1] http://www.enterprisedb.com/learning/pginst_guide.do -- Fabrízio de Royes Mello Blog sobre TI: http://fabriziomello.blogspot.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Instalação silenciosa
Pessoal estou tentando fazer um instalador para nossos sistemas, mas me deparei com a instalação do banco. Alguém poderia me dar uma ajuda para fazer o script de instalação do postgresql? Obrigado! ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] variavel com nome variavel
Em 9 de março de 2010 09:45, flavio fla...@atttransbordo.com.br escreveu: Por favor Gostaria de saber se eh possivel fazer isto em uma funcao. estou tentando pegar o valor de uma variavel montando o nome desta variavel. ( nao sei como me expressar, talvez por isso nao consigo achar mais info nos manuais) assim: select mov_rec.id_contrato into valor; RAISE NOTICE ''valor: (%)'', valor; isto eh o que eu quero no final, mas 'mov_rec.id_contrato' eu estou montanto em um loop porque alem de id_contrato vao ter outros campos para pesquisar em mov_rec, assim: nome_campo := ''mov_rec'' || ''.'' || tabela_detalhe_campos; o valor de nome_campo fica: 'mov_rec.id_contrato' qual a sintaxe que eu posso usar para conseguir o valor da variavel que esta em 'nome_campo'? Ja tentei assim: select nome_campo into valor_var; Ja tentei assim: select quote_literal(nome_campo) into valor_var; assim: EXECUTE ''select quote_literal(nome_campo)'' INTO valor_rec; assim: EXECUTE nome_campo INTO valor_rec; assim: FOR valor_rec IN EXECUTE nome_campo LOOP END LOOP; Mas nao cosegui pegar o valor, alguem poderia me dara uma luz ou mais alguma referencia nos manuais? Muito obrigado So mais uma duvida, como eu acesso o historico das discussoes da lista? Tente: EXECUTE 'SELECT quote_literal(' || nome_campo ||') INTO valor_rec'; dica: monte a expressão em uma variável e coloque um raise notice desta variável para confirmar se a expressão SQL é efetivamente a que você deseja. O histórico está em: http://listas.postgresql.org.br/pipermail/pgbr-geral/ ou ainda você pode usar um agregador, como por ex. o nabble: http://old.nabble.com/PostgreSQL---Brasil-f15652.html Osvaldo ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] variavel com nome variavel
Em 9 de março de 2010 09:45, flavio fla...@atttransbordo.com.br escreveu: Por favor Gostaria de saber se eh possivel fazer isto em uma funcao. estou tentando pegar o valor de uma variavel montando o nome desta variavel. ( nao sei como me expressar, talvez por isso nao consigo achar mais info nos manuais) assim: select mov_rec.id_contrato into valor; RAISE NOTICE ''valor: (%)'', valor; isto eh o que eu quero no final, mas 'mov_rec.id_contrato' eu estou montanto em um loop porque alem de id_contrato vao ter outros campos para pesquisar em mov_rec, assim: nome_campo := ''mov_rec'' || ''.'' || tabela_detalhe_campos; o valor de nome_campo fica: 'mov_rec.id_contrato' qual a sintaxe que eu posso usar para conseguir o valor da variavel que esta em 'nome_campo'? Dê uma olhada no manual [1] talvez esclareça melhor sua dúvida. [1] http://www.postgresql.org/docs/8.3/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN -- 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] variavel com nome variavel
Em 9 de março de 2010 10:25, Osvaldo Kussama osvaldo.kuss...@gmail.com escreveu: Tente: EXECUTE 'SELECT quote_literal(' || nome_campo ||') INTO valor_rec'; Ola Osvaldo, Aquele INTO valor_rec não deveria ser fora das aspas (')? Ou seja, deveria fazer parte do EXECUTE e não do SELECT dinâmico. Por exemplo: EXECUTE 'SELECT quote_literal(' || nome_campo || ') FROM nome_tabela' INTO valor_rec; []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] variavel com nome variavel
Em 9 de março de 2010 10:38, Dickson S. Guedes lis...@guedesoft.net escreveu: Em 9 de março de 2010 10:25, Osvaldo Kussama osvaldo.kuss...@gmail.com escreveu: Tente: EXECUTE 'SELECT quote_literal(' || nome_campo ||') INTO valor_rec'; Ola Osvaldo, Aquele INTO valor_rec não deveria ser fora das aspas (')? Ou seja, deveria fazer parte do EXECUTE e não do SELECT dinâmico. Por exemplo: EXECUTE 'SELECT quote_literal(' || nome_campo || ') FROM nome_tabela' INTO valor_rec; Perfeitamente, na pressa acabei omitindo parte do comando. Osvaldo ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] variavel com nome variavel
Por favor Gostaria de saber se eh possivel fazer isto em uma funcao. estou tentando pegar o valor de uma variavel montando o nome desta variavel. ( nao sei como me expressar, talvez por isso nao consigo achar mais info nos manuais) assim: select mov_rec.id_contrato into valor; RAISE NOTICE ''valor: (%)'', valor; isto eh o que eu quero no final, mas 'mov_rec.id_contrato' eu estou montanto em um loop porque alem de id_contrato vao ter outros campos para pesquisar em mov_rec, assim: nome_campo := ''mov_rec'' || ''.'' || tabela_detalhe_campos; o valor de nome_campo fica: 'mov_rec.id_contrato' qual a sintaxe que eu posso usar para conseguir o valor da variavel que esta em 'nome_campo'? Ja tentei assim: select nome_campo into valor_var; Ja tentei assim: select quote_literal(nome_campo) into valor_var; assim: EXECUTE ''select quote_literal(nome_campo)'' INTO valor_rec; assim: EXECUTE nome_campo INTO valor_rec; assim: FOR valor_rec IN EXECUTE nome_campo LOOP END LOOP; Mas nao cosegui pegar o valor, alguem poderia me dara uma luz ou mais alguma referencia nos manuais? Muito obrigado So mais uma duvida, como eu acesso o historico das discussoes da lista? ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] variavel com nome variavel
Em 9 de março de 2010 10:25, Osvaldo Kussama osvaldo.kuss...@gmail.com escreveu: Tente: EXECUTE 'SELECT quote_literal(' || nome_campo ||') INTO valor_rec'; Ola Osvaldo, Aquele INTO valor_rec não deveria ser fora das aspas (')? Ou seja, deveria fazer parte do EXECUTE e não do SELECT dinâmico. Por exemplo: EXECUTE 'SELECT quote_literal(' || nome_campo || ') FROM nome_tabela' INTO valor_rec; Perfeitamente, na pressa acabei omitindo parte do comando. Osvaldo Obrigado Osvaldo e Guedes pelas dicas Está acontecendo o seguinte: Se eu fizer assim: EXECUTE ''select quote_literal( '' || nome_campo || '' ) '' INTO valor_rec; sendo o valor de nome_campo = 'mov_rec.id_contrato' fica assim... EXECUTE select ' mov_rec.id_contrato' INTO valor_rec; aqui eu recebo o seguinte erro: WARNING: Error occurred while executing PL/pgSQL function f_gera_fatura WARNING: line 550 at execute statement ERROR: Relation mov_rec does not exist Mas se eu faço assim: EXECUTE ''select '' || quote_literal(nome_campo ) INTO valor_rec; fica assim... EXECUTE select 'mov_rec.id_contrato' INTO valor_rec; aqui nao recebo erro mas como fazer para ver o valor de valor_rec? RAISE NOTICE ''valor_rec: (%)'', valor_rec; retorna (NULL) ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Localizar determinado caracter
É possível localizar determinado caracter nos registros de uma tabela? Exemplo: em minha tabela, os registros estão da seguinte forma: Promo��o. (é isso mesmo, interrogação dentro de um triângulo). o certo seria Promoção, ou seja, existe algum comando que eu execute e retorne todos os registros que contenham �. Agradeço desde já a todos pela colaboração. -- Atenciosamente, Danilo Gomes Desenvolvimento 55 11 2864-0041 55 11 2864-0082 danilo.go...@pgopen.com.br www.pgopen.com.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] Localizar determinado caracter
2010/3/9 Danilo Gomes [PGOpen] danilo.go...@pgopen.com.br: É possível localizar determinado caracter nos registros de uma tabela? Já olhaste a documentação sobre funções de caracter? -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (11) 3854 7191 gTalk: xmpp:leand...@jabber.org +55 (11) 9406 7191ICQ/AIM: aim:GoIM?screenname=61287803 BRAZIL GMT-3 MSN: msnim:chat?contact=lean...@dutra.fastmail.fm ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Localizar determinado caracter
Isso é problema de encoding. Provavelmente caracteres LATIN1 num banco UTF-8 ou vice-versa. Em 9 de março de 2010 16:18, Danilo Gomes [PGOpen] danilo.go...@pgopen.com.br escreveu: É possível localizar determinado caracter nos registros de uma tabela? Exemplo: em minha tabela, os registros estão da seguinte forma: Promo��o. (é isso mesmo, interrogação dentro de um triângulo). o certo seria Promoção, ou seja, existe algum comando que eu execute e retorne todos os registros que contenham �. Agradeço desde já a todos pela colaboração. -- Atenciosamente, Alexsander da Rosa Linux User #113925 Extremismo na defesa da liberdade não é defeito. Moderação na busca por justiça não é virtude. -- Barry Goldwater ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Fwd: pgfouine
Boa tarde a todos !!! Pessoal instalei o pgfouine mas não consigo ler os logs. Os arquivos html são criados mas sem informações. Meu ambiente : SO = Freebsd 7.1 Banco 8.4.2 Pgfouine 1.0.1 No postgresql.conf habilitei o log com : log_destination = 'stderr' logging_collector = on log_directory = 'pg_log' log_filename = 'postgresql-%Y-%m-%d.log' #log_truncate_on_rotation = off log_rotation_age = 1d log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d ' Quando tento executar o pgfouine com as seguintes opções : /usr/local/bin/pgfouine -file postgresql-2010-03-09.log -top 40 -report queries.html=overall,bytype,slowest,n-mosttime,n-mostfrequent,n-slowestaverage -report hourly.html=overall,hourly -report errors.html=overall,n-mostfrequenterrors -format html-with-graphs -logtype stderr recebo as seguintes mensagens : Unrecognized LOG or DEBUG line: user=,db= LOG: database system was shut down at 2010-03-09 14:41:05 BRT - log line 1 Unrecognized LOG or DEBUG line: user=,db= LOG: database system is ready to accept connections - log line 2 Unrecognized LOG or DEBUG line: user=,db= LOG: autovacuum launcher started - log line 3 Your log file contains multiline queries. We cannot guarantee the consistency of the queries. PHP Warning: min(): Array must contain at least one element in /usr/local/share/pgfouine/include/reporting/reports/HourlyStatsReport.class.php on line 148 PHP Warning: max(): Array must contain at least one element in /usr/local/share/pgfouine/include/reporting/reports/HourlyStatsReport.class.php on line 149 Agora não sei se tem algum erro na instalação, ou se preciso mudar o formato do log !!! Pela mensagem de erro do php, algum array não foi gerado. Estou imaginando que o arquivo de log foi lido pelo pgfouine, mas não foi gerado o array com as informações. Alguém tem alguma sugestão ??? Obrigado André ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Estatísticas de Acesso
Boa tarde senhores! Seguinte, estou planejando um sistema web (evolução de um já existente) e tive uma discussão com o chefe do projeto sobre como armazenar algumas estatísticas, por isso gostaria da opinião de vocês. Explicando: Basicamente quando entramos na página de detalhes de um produto precisamos armazenar duas informações: o ID do produto e a data. Então a princípio temos duas abordagens: 1) INSERT INTO estatisticas VALUES (ID,DATA); 2) UPDATE estatisticas SET total = total+1 WHERE ID = ... AND DATA = ...; Duas questões importantes: - Essa estatística estará disponível apenas para o dono do produto, que acessará um ADMIN onde poderá visualizar o número de cliques no produto dele. - Fazendo uma média do último mês, teríamos 500k visitas em produtos por mês. Mas a perspectiva é pra crescimento com o novo sistema, então fizemos a perspectiva de 9M de visitas em produtos num período de 6 meses (1,5M por mês). Pergunta: quais as vantagens de cada abordagem sobre a outra? Existe algum método consolidado de como deve ser feito isso? Completando: Também foi discutida a ideia de fazer uma solução intermediária, mantendo a tabela apenas com ID e DATA (para preservar apenas os inserts nas visitas) e rodando um serviço 3 ou 4 vezes por dia para alimentar uma outra tabela que armazenaria o ID, a DATA e o COUNT para aquela data... Seria válida também? Desde já agradeço! Att, Wagner Bonfiglio ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] variavel com nome variavel
Em 9 de março de 2010 16:08, flavio fla...@atttransbordo.com.br escreveu: Obrigado Osvaldo e Guedes pelas dicas Está acontecendo o seguinte: Se eu fizer assim: EXECUTE ''select quote_literal( '' || nome_campo || '' ) '' INTO valor_rec; sendo o valor de nome_campo = 'mov_rec.id_contrato' fica assim... EXECUTE select ' mov_rec.id_contrato' INTO valor_rec; aqui eu recebo o seguinte erro: WARNING: Error occurred while executing PL/pgSQL function f_gera_fatura WARNING: line 550 at execute statement ERROR: Relation mov_rec does not exist Mas se eu faço assim: EXECUTE ''select '' || quote_literal(nome_campo ) INTO valor_rec; fica assim... EXECUTE select 'mov_rec.id_contrato' INTO valor_rec; aqui nao recebo erro mas como fazer para ver o valor de valor_rec? RAISE NOTICE ''valor_rec: (%)'', valor_rec; retorna (NULL) Creio que seu comando esteja incompleto, talvez seja algo do tipo: EXECUTE 'SELECT ' || quote_ident(nome_campo) || ' FROM ' || quote_ident(sua_tabela) || ' WHERE ' || quote_ident (seu_campo) || ' = ' || quote_literal(valor) INTO valor_rec; repare que é EXECUTE 'string com o comando a ser executado' INTO valor_rec; Veja http://www.postgresql.org/docs/current/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN Caso esteja enfrentando dificuldades com os caracteres delimitadores ' veja 4.1.2.4. Dollar-Quoted String Constants em: http://www.postgresql.org/docs/current/interactive/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS Osvaldo ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Histórico de Atualizações
Srs. Preciso manter um histórico de atualizações em determinadas tabelas do banco, ou seja quando um registro for alterado, ser mantido também o valor anterior. Pensei em replicar os dados em uma mesma tabela, o que não é legal, a tabela ficaria com um volume de informações que não é acessado com frequencia. Pensei em clonar a view dentro do banco e inserir nas tabelas referentes as linhas atualizadas com a data de atualização. Pra isso o ideal seria uma triger que fizesse este procedimento quando um dado for alterado. O problema é que não sei por onde começar. Alguém poderia me indicar um caminho? Obrigado. -- Alípio Dantas da Silva Secretaria de Desenvolvimento Urbano do Estado da Bahia Coordenação de Informações Geográficas Urbanas - CGI ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Histórico de Atualizações
Eu uso triggers que armazenam as colunas necessárias (no meu caso, são valores monetários) numa tabela. Tenho colunas como datahora (timestamp), tabela/coluna (2 x varchar); e valor anterior/novo (2 x numeric), ID do usuário que alterou, etc. Fica uma tabela única com todas as alterações que pode ser facilmente pesquisada. Em 9 de março de 2010 17:22, Alipio Dantas alipiodan...@gmail.comescreveu: Srs. Preciso manter um histórico de atualizações em determinadas tabelas do banco, ou seja quando um registro for alterado, ser mantido também o valor anterior. Pensei em replicar os dados em uma mesma tabela, o que não é legal, a tabela ficaria com um volume de informações que não é acessado com frequencia. Pensei em clonar a view dentro do banco e inserir nas tabelas referentes as linhas atualizadas com a data de atualização. Pra isso o ideal seria uma triger que fizesse este procedimento quando um dado for alterado. O problema é que não sei por onde começar. Alguém poderia me indicar um caminho? Obrigado. -- Alípio Dantas da Silva Secretaria de Desenvolvimento Urbano do Estado da Bahia Coordenação de Informações Geográficas Urbanas - CGI ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Atenciosamente, Alexsander da Rosa Linux User #113925 Extremismo na defesa da liberdade não é defeito. Moderação na busca por justiça não é virtude. -- Barry Goldwater ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Histórico de Atualizações
Alípio, Há um tempo atrás resolvi esse problema criando cadeia de triggers nas minhas tabelas de interesse, fazendo com que através dos objetos NEW e OLD (no momento do processamento da trigger), eu conseguisse gravar em uma terceira tabela somente as diferenças dos valores (em caso de UPDATE), ou informações de DELETE e INSERT, juntamente com dados da operação (timestamp, usuário, entre outros). Isso funcionava como um Audit Table de garagem. Se eu não me engano (me corrijam por favor), o PostgreSQL tem o Table Audit, que provavelmente ajudará você a resolver seu problema. Boa sorte, Bruno Simioni. 2010/3/9 Alipio Dantas alipiodan...@gmail.com: Srs. Preciso manter um histórico de atualizações em determinadas tabelas do banco, ou seja quando um registro for alterado, ser mantido também o valor anterior. Pensei em replicar os dados em uma mesma tabela, o que não é legal, a tabela ficaria com um volume de informações que não é acessado com frequencia. Pensei em clonar a view dentro do banco e inserir nas tabelas referentes as linhas atualizadas com a data de atualização. Pra isso o ideal seria uma triger que fizesse este procedimento quando um dado for alterado. O problema é que não sei por onde começar. Alguém poderia me indicar um caminho? Obrigado. -- Alípio Dantas da Silva Secretaria de Desenvolvimento Urbano do Estado da Bahia Coordenação de Informações Geográficas Urbanas - CGI ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] variavel com nome variavel]
Creio que seu comando esteja incompleto, talvez seja algo do tipo: EXECUTE 'SELECT ' || quote_ident(nome_campo) || ' FROM ' || quote_ident(sua_tabela) || ' WHERE ' || quote_ident (seu_campo) || ' = ' || quote_literal(valor) INTO valor_rec; repare que é EXECUTE 'string com o comando a ser executado' Osvaldo Eu faço uma consulta com FOR LOOP FOR mov_rec IN EXECUTE ''SELECT * '' || '' FROM '' || contratos_fat_rec.nome_tabela_1 || '' WHERE id_contrato = '' || contratos_fat_rec.id_contrato LOOP O problema é que eu preciso pegar os valores retornados cujo nome eu tenho que montar dentro de outro loop em um array que contem os nomes dos campos para o record 'mov_rec'. mov_rec + nome_campo_array Assim: mov_rec.id_contrato mov_rec.ticket mov_rec.veiculo ... para pegar o valor eu posso usar select mov_rec.id_contrato into valor; O problema é que a parte 'id_contrato' vem do loop no array com os nomes, então o que eu tinha achado no manual era o comando EXECUTE para fazer o comando dinamico. Por isso eu estou tentando assim: EXECUTE ''select mov_rec'' || ''.'' || nome_campo_array INTO valor_rec; mas parece que dentro do EXECUTE nao é reconhecido o 'mov_rec', é a impressao que dá... Talvez tenha outra maneira de pegar os valores mas nao encontrei. Não sei se me expressei bem, mas obrigado pela atenção, se tiver mais alguma dica... ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Histórico de Atualizações
Há várias formas de fazer. Eu pessoalmente criar uma tabela extra, com os dados mutáveis, vinculada 1-n com a original, guardando assim versões das informações. Ou seja, mantenha a tabela original tal qual, crie uma outra onde vc faz o insert dos novos dados, com timestamp da atualização. Isso permitiria até uma visualização do histórico de alterações, se for necessário. Aí, vc pode fazer uma trigger on update para fazer o insert nessa outra tabela. Dessa forma, fica transparente para qualquer aplicação que já tenha sido criada (nenhuma alteração estrutural importante no banco), e você ainda mantém a tabela original limpa, ou seja, apenas com o dado atualizado. Em 9 de março de 2010 17:22, Alipio Dantas alipiodan...@gmail.com escreveu: Srs. Preciso manter um histórico de atualizações em determinadas tabelas do banco, ou seja quando um registro for alterado, ser mantido também o valor anterior. Pensei em replicar os dados em uma mesma tabela, o que não é legal, a tabela ficaria com um volume de informações que não é acessado com frequencia. Pensei em clonar a view dentro do banco e inserir nas tabelas referentes as linhas atualizadas com a data de atualização. Pra isso o ideal seria uma triger que fizesse este procedimento quando um dado for alterado. O problema é que não sei por onde começar. Alguém poderia me indicar um caminho? Obrigado. -- Alípio Dantas da Silva Secretaria de Desenvolvimento Urbano do Estado da Bahia Coordenação de Informações Geográficas Urbanas - CGI ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- = Pablo Santiago Sánchez Análise e Desenvolvimento de Sistemas Web Zend Certified Engineer #ZEND006757 phack...@gmail.com (61) 9975-0883 http://www.sansis.com.br http://www.corephp.com.br Quidquid latine dictum sit, altum viditur = ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Histórico de Atualizações
Srs. Primeiramente obrigado pelas sugestões. Realmente foi bem simples. Criei uma tabela de histórico e fiz uma trigger para armazenar o valor atual antes de ser atualizado. Vou pesquisar sobre a tabela de auditoria do postgres. Mais uma vez obrigado a todos. Em 9 de março de 2010 18:25, Pablo Sánchez phack...@gmail.com escreveu: Há várias formas de fazer. Eu pessoalmente criar uma tabela extra, com os dados mutáveis, vinculada 1-n com a original, guardando assim versões das informações. Ou seja, mantenha a tabela original tal qual, crie uma outra onde vc faz o insert dos novos dados, com timestamp da atualização. Isso permitiria até uma visualização do histórico de alterações, se for necessário. Aí, vc pode fazer uma trigger on update para fazer o insert nessa outra tabela. Dessa forma, fica transparente para qualquer aplicação que já tenha sido criada (nenhuma alteração estrutural importante no banco), e você ainda mantém a tabela original limpa, ou seja, apenas com o dado atualizado. Em 9 de março de 2010 17:22, Alipio Dantas alipiodan...@gmail.com escreveu: Srs. Preciso manter um histórico de atualizações em determinadas tabelas do banco, ou seja quando um registro for alterado, ser mantido também o valor anterior. Pensei em replicar os dados em uma mesma tabela, o que não é legal, a tabela ficaria com um volume de informações que não é acessado com frequencia. Pensei em clonar a view dentro do banco e inserir nas tabelas referentes as linhas atualizadas com a data de atualização. Pra isso o ideal seria uma triger que fizesse este procedimento quando um dado for alterado. O problema é que não sei por onde começar. Alguém poderia me indicar um caminho? Obrigado. -- Alípio Dantas da Silva Secretaria de Desenvolvimento Urbano do Estado da Bahia Coordenação de Informações Geográficas Urbanas - CGI ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- = Pablo Santiago Sánchez Análise e Desenvolvimento de Sistemas Web Zend Certified Engineer #ZEND006757 phack...@gmail.com (61) 9975-0883 http://www.sansis.com.br http://www.corephp.com.br Quidquid latine dictum sit, altum viditur = ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Alípio Dantas da Silva Secretaria de Desenvolvimento Urbano do Estado da Bahia Coordenação de Informações Geográficas Urbanas - CGI DBA - Geo ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Array como parâmetro e retorno da m esma função
Oi pessoal, Preciso de ajuda, procurei na net e post antigos, mas não encontrei nada que me ajudasse. Preciso passar um array como parâmetro para uma função e ela me retornará o mesmo array alterado. Vi algumas explicações na net e a função atualmente está assim: CREATE OR REPLACE FUNCTION teste_array(integer[]) RETURNS integer[] AS $$ DECLARE array integer[]; BEGIN array := $1; FOR i IN 1..10 LOOP array[i] := i+9; END LOOP; RETURN array; END; $$ LANGUAGE plpgsql; Porém está retornando o seguinte erro: psql:teste.sql:14: ERRO: não pode mudar o tipo de retorno da função existente HINT: Primeiro utilize DROP FUNCTION. P.S. Já coloquei um DROP FUNCTION teste_array() no começo da função, não acho necessário pq tem um REPLACE, mas em todo caso. _ Quer transformar suas fotos em emoticons para Messenger? Conheça o I Love Messenger. http://ilm.windowslive.com.br/?ocid=ILM:ILM:Hotmail:Tagline:1x1:Tagline___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Fwd: pgfouine
André, Esse erro acontece com todos os arquivos de logs do PostgreSQL? Abraço 2010/3/9 André Ormenese ( Yahoo ) ormen...@yahoo.com.br Boa tarde a todos !!! Pessoal instalei o pgfouine mas não consigo ler os logs. Os arquivos html são criados mas sem informações. Meu ambiente : SO = Freebsd 7.1 Banco 8.4.2 Pgfouine 1.0.1 No postgresql.conf habilitei o log com : log_destination = 'stderr' logging_collector = on log_directory = 'pg_log' log_filename = 'postgresql-%Y-%m-%d.log' #log_truncate_on_rotation = off log_rotation_age = 1d log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d ' Quando tento executar o pgfouine com as seguintes opções : /usr/local/bin/pgfouine -file postgresql-2010-03-09.log -top 40 -report queries.html=overall,bytype,slowest,n-mosttime,n-mostfrequent,n-slowestaverage -report hourly.html=overall,hourly -report errors.html=overall,n-mostfrequenterrors -format html-with-graphs -logtype stderr recebo as seguintes mensagens : Unrecognized LOG or DEBUG line: user=,db= LOG: database system was shut down at 2010-03-09 14:41:05 BRT - log line 1 Unrecognized LOG or DEBUG line: user=,db= LOG: database system is ready to accept connections - log line 2 Unrecognized LOG or DEBUG line: user=,db= LOG: autovacuum launcher started - log line 3 Your log file contains multiline queries. We cannot guarantee the consistency of the queries. PHP Warning: min(): Array must contain at least one element in /usr/local/share/pgfouine/include/reporting/reports/HourlyStatsReport.class.php on line 148 PHP Warning: max(): Array must contain at least one element in /usr/local/share/pgfouine/include/reporting/reports/HourlyStatsReport.class.php on line 149 Agora não sei se tem algum erro na instalação, ou se preciso mudar o formato do log !!! Pela mensagem de erro do php, algum array não foi gerado. Estou imaginando que o arquivo de log foi lido pelo pgfouine, mas não foi gerado o array com as informações. Alguém tem alguma sugestão ??? Obrigado André ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Matheus Ricardo Espanhol --- Dextra Sistemas http://www.dextra.com.br/postgres/ ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Array como parâmetro e retorno da m esma função
Em 9 de março de 2010 19:29, Tiago Kepe tiagok...@hotmail.com escreveu: Oi pessoal, Preciso de ajuda, procurei na net e post antigos, mas não encontrei nada que me ajudasse. Preciso passar um array como parâmetro para uma função e ela me retornará o mesmo array alterado. Vi algumas explicações na net e a função atualmente está assim: CREATE OR REPLACE FUNCTION teste_array(integer[]) RETURNS integer[] AS $$ DECLARE array integer[]; BEGIN array := $1; FOR i IN 1..10 LOOP array[i] := i+9; END LOOP; RETURN array; END; $$ LANGUAGE plpgsql; Porém está retornando o seguinte erro: psql:teste.sql:14: ERRO: não pode mudar o tipo de retorno da função existente HINT: Primeiro utilize DROP FUNCTION. P.S. Já coloquei um DROP FUNCTION teste_array() no começo da função, não acho necessário pq tem um REPLACE, mas em todo caso. Tente: CREATE OR REPLACE FUNCTION teste_array(inout array integer[]) AS $$ BEGIN FOR i IN 1..array_upper(array, 1) LOOP array[i] := i+9; END LOOP; RETURN; END; $$ LANGUAGE plpgsql; Osvaldo ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Array como parâmetro e retorno da m esma função
Date: Tue, 9 Mar 2010 19:50:47 -0300 From: osvaldo.kuss...@gmail.com To: pgbr-geral@listas.postgresql.org.br Subject: Re: [pgbr-geral] Array como parâmetro e retorno da mesma função Em 9 de março de 2010 19:29, Tiago Kepe tiagok...@hotmail.com escreveu: Oi pessoal, Preciso de ajuda, procurei na net e post antigos, mas não encontrei nada que me ajudasse. Preciso passar um array como parâmetro para uma função e ela me retornará o mesmo array alterado. Vi algumas explicações na net e a função atualmente está assim: CREATE OR REPLACE FUNCTION teste_array(integer[]) RETURNS integer[] AS $$ DECLARE array integer[]; BEGIN array := $1; FOR i IN 1..10 LOOP array[i] := i+9; END LOOP; RETURN array; END; $$ LANGUAGE plpgsql; Porém está retornando o seguinte erro: psql:teste.sql:14: ERRO: não pode mudar o tipo de retorno da função existente HINT: Primeiro utilize DROP FUNCTION. P.S. Já coloquei um DROP FUNCTION teste_array() no começo da função, não acho necessário pq tem um REPLACE, mas em todo caso. Tente: CREATE OR REPLACE FUNCTION teste_array(inout array integer[]) AS $$ BEGIN FOR i IN 1..array_upper(array, 1) LOOP array[i] := i+9; END LOOP; RETURN; END; $$ LANGUAGE plpgsql; Osvaldo Não funcionou, dá erro de sintaxe. _ Quer transformar suas fotos em emoticons para Messenger? Conheça o I Love Messenger. http://ilm.windowslive.com.br/?ocid=ILM:ILM:Hotmail:Tagline:1x1:Tagline___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] variavel com nome variavel]
Em 9 de março de 2010 18:21, flavio fla...@atttransbordo.com.br escreveu: Creio que seu comando esteja incompleto, talvez seja algo do tipo: EXECUTE 'SELECT ' || quote_ident(nome_campo) || ' FROM ' || quote_ident(sua_tabela) || ' WHERE ' || quote_ident (seu_campo) || ' = ' || quote_literal(valor) INTO valor_rec; repare que é EXECUTE 'string com o comando a ser executado' Osvaldo Eu faço uma consulta com FOR LOOP FOR mov_rec IN EXECUTE ''SELECT * '' || '' FROM '' || contratos_fat_rec.nome_tabela_1 || '' WHERE id_contrato = '' || contratos_fat_rec.id_contrato LOOP O problema é que eu preciso pegar os valores retornados cujo nome eu tenho que montar dentro de outro loop em um array que contem os nomes dos campos para o record 'mov_rec'. mov_rec + nome_campo_array Assim: mov_rec.id_contrato mov_rec.ticket mov_rec.veiculo ... para pegar o valor eu posso usar select mov_rec.id_contrato into valor; O problema é que a parte 'id_contrato' vem do loop no array com os nomes, então o que eu tinha achado no manual era o comando EXECUTE para fazer o comando dinamico. Por isso eu estou tentando assim: EXECUTE ''select mov_rec'' || ''.'' || nome_campo_array INTO valor_rec; mas parece que dentro do EXECUTE nao é reconhecido o 'mov_rec', é a impressao que dá... Talvez tenha outra maneira de pegar os valores mas nao encontrei. Não sei se me expressei bem, mas obrigado pela atenção, se tiver mais alguma dica... Não está claro o que você deseja. Quando você coloca: select mov_rec.id_contrato into valor; você está fazendo apenas uma atribuição que poderia ser feita simplesmente: valor := mov_rec.id_contrato; Aí você fala de um array mas o comando que você apresenta não tem nenhum subscrito. Talvez: EXECUTE 'SELECT mov_rec.' || nome_campo_array[i] INTO valor_rec; supondo que nome_campo_array[i] contenha o nome do campo do qual você deseja obter o valor, por ex. id_contrato. É isso? Osvaldo ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Array como parâmetro e retorno da m esma função
Em 9 de março de 2010 19:59, Tiago Kepe tiagok...@hotmail.com escreveu: Date: Tue, 9 Mar 2010 19:50:47 -0300 From: osvaldo.kuss...@gmail.com To: pgbr-geral@listas.postgresql.org.br Subject: Re: [pgbr-geral] Array como parâmetro e retorno da mesma função Em 9 de março de 2010 19:29, Tiago Kepe tiagok...@hotmail.com escreveu: Oi pessoal, Preciso de ajuda, procurei na net e post antigos, mas não encontrei nada que me ajudasse. Preciso passar um array como parâmetro para uma função e ela me retornará o mesmo array alterado. Vi algumas explicações na net e a função atualmente está assim: CREATE OR REPLACE FUNCTION teste_array(integer[]) RETURNS integer[] AS $$ DECLARE array integer[]; BEGIN array := $1; FOR i IN 1..10 LOOP array[i] := i+9; END LOOP; RETURN array; END; $$ LANGUAGE plpgsql; Porém está retornando o seguinte erro: psql:teste.sql:14: ERRO: não pode mudar o tipo de retorno da função existente HINT: Primeiro utilize DROP FUNCTION. P.S. Já coloquei um DROP FUNCTION teste_array() no começo da função, não acho necessário pq tem um REPLACE, mas em todo caso. Tente: CREATE OR REPLACE FUNCTION teste_array(inout array integer[]) AS $$ BEGIN FOR i IN 1..array_upper(array, 1) LOOP array[i] := i+9; END LOOP; RETURN; END; $$ LANGUAGE plpgsql; Osvaldo Não funcionou, dá erro de sintaxe. Qual versão do PostgreSQL você está usando? Osvaldo ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Array como parâmetro e retorno da m esma função
Date: Tue, 9 Mar 2010 20:01:42 -0300 From: osvaldo.kuss...@gmail.com To: pgbr-geral@listas.postgresql.org.br Subject: Re: [pgbr-geral] Array como parâmetro e retorno da mesma função Em 9 de março de 2010 19:59, Tiago Kepe tiagok...@hotmail.com escreveu: Date: Tue, 9 Mar 2010 19:50:47 -0300 From: osvaldo.kuss...@gmail.com To: pgbr-geral@listas.postgresql.org.br Subject: Re: [pgbr-geral] Array como parâmetro e retorno da mesma função Em 9 de março de 2010 19:29, Tiago Kepe tiagok...@hotmail.com escreveu: Oi pessoal, Preciso de ajuda, procurei na net e post antigos, mas não encontrei nada que me ajudasse. Preciso passar um array como parâmetro para uma função e ela me retornará o mesmo array alterado. Vi algumas explicações na net e a função atualmente está assim: CREATE OR REPLACE FUNCTION teste_array(integer[]) RETURNS integer[] AS $$ DECLARE array integer[]; BEGIN array := $1; FOR i IN 1..10 LOOP array[i] := i+9; END LOOP; RETURN array; END; $$ LANGUAGE plpgsql; Porém está retornando o seguinte erro: psql:teste.sql:14: ERRO: não pode mudar o tipo de retorno da função existente HINT: Primeiro utilize DROP FUNCTION. P.S. Já coloquei um DROP FUNCTION teste_array() no começo da função, não acho necessário pq tem um REPLACE, mas em todo caso. Tente: CREATE OR REPLACE FUNCTION teste_array(inout array integer[]) AS $$ BEGIN FOR i IN 1..array_upper(array, 1) LOOP array[i] := i+9; END LOOP; RETURN; END; $$ LANGUAGE plpgsql; Osvaldo Não funcionou, dá erro de sintaxe. Qual versão do PostgreSQL você está usando? Osvaldo A versão eh 8.3. O erro ocorre quando eu passo um vetor como parâmetro e retorno um vetor, mesmo que eu não manipule esse vetor na função, fiz um teste assim, deixo um vetor como parâmetro, não faço nada com esse vetor na função, dai retorno outro vetor que eh um variável interna, mas ele nem compila: CREATE OR REPLACE FUNCTION teste_array(vetor integer[]) RETURNS integer[] AS $$ DECLARE array integer[]; BEGIN FOR i IN 1..10 LOOP array[i] := i+9; END LOOP; RETURN array; END; $$ LANGUAGE plpgsql; Mas já consegui resolver por aki para o meu problema, eu não passei mais o array como parâmetro, agora só estou retornando um array, ficou assim: CREATE OR REPLACE FUNCTION teste_array() RETURNS integer[] AS $$ DECLARE array integer[]; BEGIN FOR i IN 1..10 LOOP array[i] := i+9; END LOOP; RETURN array; END; $$ LANGUAGE plpgsql; Passando um vetor e alterando ele na função, ainda não consegui fazer, para o meu caso está resolvido, contudo, acredito que seria interessando repassar as soluções para ajudar a comunidade. Obrigado, Tiago Kepe. _ Navegue sem medo: O Internet Explorer 8 te deixa mais protegido. Baixe gratuitamente. http://go.microsoft.com/?linkid=9707132___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Array como parâmetro e retorno da m esma função
Em 9 de março de 2010 22:19, Tiago Kepe tiagok...@hotmail.com escreveu: A versão eh 8.3. O erro ocorre quando eu passo um vetor como parâmetro e retorno um vetor, mesmo que eu não manipule esse vetor na função, fiz um teste assim, deixo um vetor como parâmetro, não faço nada com esse vetor na função, dai retorno outro vetor que eh um variável interna, mas ele nem compila: CREATE OR REPLACE FUNCTION teste_array(vetor integer[]) RETURNS integer[] AS $$ DECLARE array integer[]; BEGIN FOR i IN 1..10 LOOP array[i] := i+9; END LOOP; RETURN array; END; $$ LANGUAGE plpgsql; Mas já consegui resolver por aki para o meu problema, eu não passei mais o array como parâmetro, agora só estou retornando um array, ficou assim: CREATE OR REPLACE FUNCTION teste_array() RETURNS integer[] AS $$ DECLARE array integer[]; BEGIN FOR i IN 1..10 LOOP array[i] := i+9; END LOOP; RETURN array; END; $$ LANGUAGE plpgsql; Passando um vetor e alterando ele na função, ainda não consegui fazer, para o meu caso está resolvido, contudo, acredito que seria interessando repassar as soluções para ajudar a comunidade. Aqui funcionou: bdteste=# CREATE OR REPLACE FUNCTION teste_array(inout _array integer[]) AS $$ bdteste$# BEGIN bdteste$# FOR i IN 1..array_upper(_array, 1) LOOP bdteste$#_array[i] := _array[i]+9; bdteste$#END LOOP; bdteste$#RETURN; bdteste$# END; bdteste$# $$ LANGUAGE plpgsql; CREATE FUNCTION bdteste=# SELECT teste_array(ARRAY[1,2,3,4,5]); teste_array -- {10,11,12,13,14} (1 registro) Osvaldo PS.: note que array é palavra reservada. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral