Re: [pgbr-geral] Dúvida Sobre Transações Em Postgres
Obrigado Fabiano Em 17 de março de 2011 17:54, Fabiano Machado Dias fabi...@wolaksistemas.com.br escreveu: Não precisa, pode ser dentro da função e dentro dessa função você pode chamar outras funções. Usamos isso direto no nosso ERP Exemplo: CREATE OR REPLACE FUNCTION fnc.ajustecusto() RETURNS void AS $BODY$ DECLARE rNotafiscalentrada_item RECORD; rNfei RECORD; BEGIN FOR rNotafiscalentrada_item IN SELECT * FROM notafiscalentrada_item ORDER BY pknotafiscalentrada_item LOOP SELECT INTO rNfei (fnc.notafiscalentrada_item_calcular(rNotafiscalentrada_item.fknotafiscalentrada,rNotafiscalentrada_item.pknotafiscalentrada_item)).*; UPDATE notafiscalentrada_item SET valorunitariocusto = COALESCE(rNfei.valorunitariocusto,0), demonstrativocalculocusto = rNfei.demonstrativocalculocusto WHERE pknotafiscalentrada_item = rNotafiscalentrada_item.pknotafiscalentrada_item; END LOOP; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE ALTER FUNCTION fnc.ajustecusto() OWNER TO postgres; Se for de interesse dá uma olhada nesse link, tem vários exemplos semelhantes http://pgbr.postgresql.org.br/2009/palestras/aud2/ERP.pdf http://www.4linux.com.br/noticias/2010/PostgreSQL/PGCon2009 Abraço, Fabiano Machado Dias Em 17/3/2011 15:16, izana souza torres escreveu: Blz..então cada função seria uma transação ?? só q dentro da função que estou trabalhando não posso utilizar os comando COMMIT ou ROLLBACK explicitamente.. Logo o q estou entendo pelo o q os nobre colegas estão dizendo é o seguinte.. Imagine um código Java = E nele que vou trantar o COMMIT E ROLLBACKP falando grosseirament exemplo; try { stmt.execute(select fecharCaixa()); // aqui ele chama a função fechar caixa conn.commit() // aqui ele comita caso tudo ok }catch(Exception e){ conn.rollback() // caso algum problema na hora de feixar o caixa } OU seja o que vcs estão tentando me dizer é que é em nivel de aplicação que eu vou utilizar o Comando commit e rollback por exemplo.. Em 17 de março de 2011 12:48, Rogério Bassete roge...@microwork.inf.brescreveu: Sim, Como você falou, elas podem fazer para de uma transação quando chamada dentro de uma. Mas teria como vc me dar um exemplo prático ? Izana, begin; insert into foo values ('teste','teste2'); update foo set campo1 = 'teste3' where id = 3; -- chama a sua função. select funcao_baixa_estoque(); select funcao_gera_log(); commit; Rogério Bassete ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing listpgbr-ge...@listas.postgresql.org.brhttps://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 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Dúvida Sobre Transações Em Postgres
Nobre colegas, Eu estou mudando de banco de dados, estou passando de MYSQL para POSTGRES. Meu problema é o seguinte, estou migrando uma base e não tenho muito conhecimento no POSTGRES, na minha base do MYSQL tenho algumas FUNÇÕES e dentro dessas funções tenho implementado algumas TRANSAÇÕES, minha pergunta é: No caso do Postgres onde eu armazeno minhas transações? É dentro de uma função também como no MYSQL? Entenderam minha pergunta? ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Dúvida Sobre Transações Em Postgres
Em 17-03-2011 09:24, izana souza torres escreveu: No caso do Postgres onde eu armazeno minhas transações? É dentro de uma função também como no MYSQL? O que você chama de transação? Podes dar um exemplo? -- Euler Taveira de Oliveira http://www.timbira.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] Dúvida Sobre Transações Em Postgres
Vamos lá: Tipo imaginamos o seguinte, que no MYSQL e tenha uma função FecharVenda(); dentro dessa função é iniciada uma transação para adicionar os itens relacionados a tabela vendas..vamos ao exeplo CREATE FUNCTION FecharVenda() START TRANSACTION, INSERT venda() // cria a venda INSERT itens () //Inseres os intes relacionado a venda ROLLBACK // caso tenha algum erro COMMIT // Se tudo foi ok. É mais ou menos isso ai, tipo tenho uma função em MYSQL que dentro dela se inicia uma transação, se tudo foi corretamento da um COMMIT e tiver algum erro na operação ROLLBACK e desfaz tudo.. Entendeu ? Em 17 de março de 2011 09:31, Euler Taveira de Oliveira eu...@timbira.comescreveu: Em 17-03-2011 09:24, izana souza torres escreveu: No caso do Postgres onde eu armazeno minhas transações? É dentro de uma função também como no MYSQL? O que você chama de transação? Podes dar um exemplo? -- Euler Taveira de Oliveira http://www.timbira.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
Re: [pgbr-geral] Dúvida Sobre Transações Em Postgres
É mais ou menos isso ai, tipo tenho uma função em MYSQL que dentro dela se inicia uma transação, se tudo foi corretamento da um COMMIT e tiver algum erro na operação ROLLBACK e desfaz tudo.. No PostgreSQL as funções não podem conter uma transação em seu código. Elas podem sim ser parte de uma transação quando chamadas dentro de uma. Mas isso aí é uma função do MySQL mesmo? Me pareceu estranho... Flavio Gurgel ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Dúvida Sobre Transações Em Postgres
Sim, Como você falou, elas podem fazer para de uma transação quando chamada dentro de uma. Mas teria como vc me dar um exemplo prático ? Em 17 de março de 2011 10:37, Flavio Henrique Araque Gurgel fha...@gmail.com escreveu: É mais ou menos isso ai, tipo tenho uma função em MYSQL que dentro dela se inicia uma transação, se tudo foi corretamento da um COMMIT e tiver algum erro na operação ROLLBACK e desfaz tudo.. No PostgreSQL as funções não podem conter uma transação em seu código. Elas podem sim ser parte de uma transação quando chamadas dentro de uma. Mas isso aí é uma função do MySQL mesmo? Me pareceu estranho... Flavio Gurgel ___ 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] Dúvida Sobre Transações Em Postgres
Por acaso estas funções não estariam na aplicação? Não seria a aplicação no seu caso atual que está fazendo esse controle de transação no MySQL? Abs, Fernando N. Rodrigues fernandonon...@gmail.com Em 17 de março de 2011 11:44, izana souza torres izanator...@gmail.comescreveu: Sim, Como você falou, elas podem fazer para de uma transação quando chamada dentro de uma. Mas teria como vc me dar um exemplo prático ? Em 17 de março de 2011 10:37, Flavio Henrique Araque Gurgel fha...@gmail.com escreveu: É mais ou menos isso ai, tipo tenho uma função em MYSQL que dentro dela se inicia uma transação, se tudo foi corretamento da um COMMIT e tiver algum erro na operação ROLLBACK e desfaz tudo.. No PostgreSQL as funções não podem conter uma transação em seu código. Elas podem sim ser parte de uma transação quando chamadas dentro de uma. Mas isso aí é uma função do MySQL mesmo? Me pareceu estranho... Flavio Gurgel ___ 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 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Dúvida Sobre Transações Em Postgres
2011/3/17 izana souza torres izanator...@gmail.com Sim, Como você falou, elas podem fazer para de uma transação quando chamada dentro de uma. Mas teria como vc me dar um exemplo prático ? No PostgreSQL, quando você executa uma função, ela roda sob uma transação. Se a função tiver uma exceção não tratada, tudo que houve na função (e na transação que chamou a função) será descartado (ROLLBACK). Da documentação [1]:` It is important not to confuse the use of BEGIN/END for grouping statements in PL/pgSQL with the similarly-named SQL commands for transaction control. PL/pgSQL'sBEGIN/END are only for grouping; they do not start or end a transaction. Functions and trigger procedures are always executed within a transaction established by an outer query — they cannot start or commit that transaction, since there would be no context for them to execute in. However, a block containing an EXCEPTION clause effectively forms a subtransaction that can be rolled back without affecting the outer transaction. For more about that see Section 39.6.5. Para controlar erros dentro da função, você pode usar sub-blocos dentro da função, conforme descrito em [2] Ficou claro? Roberto [1] http://www.postgresql.org/docs/9.0/interactive/plpgsql-structure.html [2] http://www.postgresql.org/docs/9.0/interactive/plpgsql-control-structures.html#PLPGSQL-ERROR-TRAPPING ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Dúvida Sobre Transações Em Postgres
Sim, Como você falou, elas podem fazer para de uma transação quando chamada dentro de uma. Mas teria como vc me dar um exemplo prático ? Izana, begin; insert into foo values ('teste','teste2'); update foo set campo1 = 'teste3' where id = 3; -- chama a sua função. select funcao_baixa_estoque(); select funcao_gera_log(); commit; Rogério Bassete ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Dúvida Sobre Transações Em Postgres
No mysql a aplicação chama a função...e dentro da função chamada é iniciada a transação feitaas as operações e depois comitada dentro da própria função Mas acho q entendir agora o q os nobres colegas estão tentando me dizer.. Tipo posso criar uma função no postgres para fazer uma operação que preciso e a nivel de aplicação eu iniciou a transação chamo a função para fazer as operações e depois a nivel de aplicação dou um comite caso ok.. seria isso né ? Em 17 de março de 2011 11:02, Fernando N. Rodrigues fernandonon...@gmail.com escreveu: Por acaso estas funções não estariam na aplicação? Não seria a aplicação no seu caso atual que está fazendo esse controle de transação no MySQL? Abs, Fernando N. Rodrigues fernandonon...@gmail.com Em 17 de março de 2011 11:44, izana souza torres izanator...@gmail.comescreveu: Sim, Como você falou, elas podem fazer para de uma transação quando chamada dentro de uma. Mas teria como vc me dar um exemplo prático ? Em 17 de março de 2011 10:37, Flavio Henrique Araque Gurgel fha...@gmail.com escreveu: É mais ou menos isso ai, tipo tenho uma função em MYSQL que dentro dela se inicia uma transação, se tudo foi corretamento da um COMMIT e tiver algum erro na operação ROLLBACK e desfaz tudo.. No PostgreSQL as funções não podem conter uma transação em seu código. Elas podem sim ser parte de uma transação quando chamadas dentro de uma. Mas isso aí é uma função do MySQL mesmo? Me pareceu estranho... Flavio Gurgel ___ 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 ___ 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] Dúvida Sobre Transações Em Postgres
Blz..então cada função seria uma transação ?? só q dentro da função que estou trabalhando não posso utilizar os comando COMMIT ou ROLLBACK explicitamente.. Logo o q estou entendo pelo o q os nobre colegas estão dizendo é o seguinte.. Imagine um código Java = E nele que vou trantar o COMMIT E ROLLBACKP falando grosseirament exemplo; try { stmt.execute(select fecharCaixa()); // aqui ele chama a função fechar caixa conn.commit() // aqui ele comita caso tudo ok }catch(Exception e){ conn.rollback() // caso algum problema na hora de feixar o caixa } OU seja o que vcs estão tentando me dizer é que é em nivel de aplicação que eu vou utilizar o Comando commit e rollback por exemplo.. Em 17 de março de 2011 12:48, Rogério Bassete roge...@microwork.inf.brescreveu: Sim, Como você falou, elas podem fazer para de uma transação quando chamada dentro de uma. Mas teria como vc me dar um exemplo prático ? Izana, begin; insert into foo values ('teste','teste2'); update foo set campo1 = 'teste3' where id = 3; -- chama a sua função. select funcao_baixa_estoque(); select funcao_gera_log(); commit; Rogério Bassete ___ 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] Dúvida Sobre Transações Em Postgres
Em 17 de março de 2011 15:16, izana souza torres izanator...@gmail.com escreveu: Blz..então cada função seria uma transação ?? só q dentro da função que estou trabalhando não posso utilizar os comando COMMIT ou ROLLBACK explicitamente.. Logo o q estou entendo pelo o q os nobre colegas estão dizendo é o seguinte.. Imagine um código Java = E nele que vou trantar o COMMIT E ROLLBACKP falando grosseirament exemplo; try { stmt.execute(select fecharCaixa()); // aqui ele chama a função fechar caixa conn.commit() // aqui ele comita caso tudo ok }catch(Exception e){ conn.rollback() // caso algum problema na hora de feixar o caixa } OU seja o que vcs estão tentando me dizer é que é em nivel de aplicação que eu vou utilizar o Comando commit e rollback por exemplo.. Isso mesmo. Só que no PostgreSQL não é START TRANSACTION, é BEGIN. []s Flavio Gurgel ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Dúvida Sobre Transações Em Postgres
START TRANSACTION tbem funciona no Postgres, acabei de fazer um teste é padrão SQL Em 17 de março de 2011 14:18, Flavio Henrique Araque Gurgel fha...@gmail.com escreveu: Em 17 de março de 2011 15:16, izana souza torres izanator...@gmail.com escreveu: Blz..então cada função seria uma transação ?? só q dentro da função que estou trabalhando não posso utilizar os comando COMMIT ou ROLLBACK explicitamente.. Logo o q estou entendo pelo o q os nobre colegas estão dizendo é o seguinte.. Imagine um código Java = E nele que vou trantar o COMMIT E ROLLBACKP falando grosseirament exemplo; try { stmt.execute(select fecharCaixa()); // aqui ele chama a função fechar caixa conn.commit() // aqui ele comita caso tudo ok }catch(Exception e){ conn.rollback() // caso algum problema na hora de feixar o caixa } OU seja o que vcs estão tentando me dizer é que é em nivel de aplicação que eu vou utilizar o Comando commit e rollback por exemplo.. Isso mesmo. Só que no PostgreSQL não é START TRANSACTION, é BEGIN. []s Flavio Gurgel ___ 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] Dúvida Sobre Transações Em Postgres
START TRANSACTION tbem funciona no Postgres, acabei de fazer um teste é padrão SQL 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] Dúvida Sobre Transações Em Postgres
Nobre colegas, estou fazendo essas perguntas pq não conheço muito o POSTGRES logo peço desculpa pela ignorancia. Além disso estou estudno pq vou dar aula de administração em banco de dados, e fui obrigado a trabalhar com POSTGRES. Logo estou trabalhando com Postgres e eleborando algumas tarefas para os alunos. Entre eles fazer engenharia reverça utilizando o information_esquema do postgres, ou seja trabalhando com catalago. Fazer também transação em Postgres, e fazer replicação de banco de dados, gostaria de saber mais uma coisa interesnate sobre o Postgres q eu posso abordar.. Tarefas e tudo mais..estou tento um pouco de dificuldade de montar tarefas sobre transações..não tenho mente regras de negocios q exija transações.. Mas já montei tarefas para eles visualizarem os nivel de isolamento e tudo mais, vcs tem mais ideias Em 17 de março de 2011 14:35, Flavio Henrique Araque Gurgel fha...@gmail.com escreveu: START TRANSACTION tbem funciona no Postgres, acabei de fazer um teste é padrão SQL Obrigado! ___ 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] Dúvida Sobre Transações Em Postgres
2011/3/17 izana souza torres izanator...@gmail.com: Nobre colegas, estou fazendo essas perguntas pq não conheço muito o POSTGRES NOBRES colegas. logo peço desculpa pela ignorancia. Não precisa pedir desculpas. Ajudamos uns aos outros. Além disso estou estudno pq vou dar aula de administração em banco de dados, e fui obrigado a trabalhar com POSTGRES. Aonde você vai dar aula? Acho que vais descobrir que ser obrigado a trabalhar com o Postgres e' muito bom. Entre eles fazer engenharia reverça utilizando o information_esquema do reversa. Fazer também transação em Postgres, e fazer replicação de banco de dados, gostaria de saber mais uma coisa interesnate sobre o Postgres q eu posso abordar.. Se e' de administração, há uma série de tópicos: otimização, monitoramento, schemas, particionamento, seleção de discos, backup e recuperação, gerenciadores de conexão, melhores práticas, etc, etc. Boa sorte, Roberto ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Dúvida Sobre Transações Em Postgres
Não precisa, pode ser dentro da função e dentro dessa função você pode chamar outras funções. Usamos isso direto no nosso ERP Exemplo: CREATE OR REPLACE FUNCTION fnc.ajustecusto() RETURNS void AS $BODY$ DECLARE rNotafiscalentrada_item RECORD; rNfei RECORD; BEGIN FOR rNotafiscalentrada_item IN SELECT * FROM notafiscalentrada_item ORDER BY pknotafiscalentrada_item LOOP SELECT INTO rNfei (fnc.notafiscalentrada_item_calcular(rNotafiscalentrada_item.fknotafiscalentrada,rNotafiscalentrada_item.pknotafiscalentrada_item)).*; UPDATE notafiscalentrada_item SET valorunitariocusto = COALESCE(rNfei.valorunitariocusto,0), demonstrativocalculocusto = rNfei.demonstrativocalculocusto WHERE pknotafiscalentrada_item = rNotafiscalentrada_item.pknotafiscalentrada_item; END LOOP; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE ALTER FUNCTION fnc.ajustecusto() OWNER TO postgres; Se for de interesse dá uma olhada nesse link, tem vários exemplos semelhantes http://pgbr.postgresql.org.br/2009/palestras/aud2/ERP.pdf http://www.4linux.com.br/noticias/2010/PostgreSQL/PGCon2009 Abraço, Fabiano Machado Dias Em 17/3/2011 15:16, izana souza torres escreveu: Blz..então cada função seria uma transação ?? só q dentro da função que estou trabalhando não posso utilizar os comando COMMIT ou ROLLBACK explicitamente.. Logo o q estou entendo pelo o q os nobre colegas estão dizendo é o seguinte.. Imagine um código Java = E nele que vou trantar o COMMIT E ROLLBACKP falando grosseirament exemplo; try { stmt.execute(select fecharCaixa()); // aqui ele chama a função fechar caixa conn.commit() // aqui ele comita caso tudo ok }catch(Exception e){ conn.rollback() // caso algum problema na hora de feixar o caixa } OU seja o que vcs estão tentando me dizer é que é em nivel de aplicação que eu vou utilizar o Comando commit e rollback por exemplo.. Em 17 de março de 2011 12:48, Rogério Bassete roge...@microwork.inf.br mailto:roge...@microwork.inf.br escreveu: Sim, Como você falou, elas podem fazer para de uma transação quando chamada dentro de uma. Mas teria como vc me dar um exemplo prático ? Izana, begin; insert into foo values ('teste','teste2'); update foo set campo1 = 'teste3' where id = 3; -- chama a sua função. select funcao_baixa_estoque(); select funcao_gera_log(); commit; Rogério Bassete ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br mailto: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 ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral