Mateus, muito obrigado, vai funcionar. Eu não soube me expressar direito no meu update, pois, como as alterações são em clientdataset ele usa como chave o id.
Em 30 de maio de 2012 23:46, Matheus de Oliveira <matioli.math...@gmail.com>escreveu: > > 2012/5/30 Anselmo Silva <anselmo....@gmail.com> > >> Dado o seguinte: >> >> ----------------------------------------------------------------------------- >> CREATE TEMP TABLE TESTE (id serial not null, >> codvenda integer, >> ordem integer); >> >> CREATE UNIQUE INDEX ON teste (codvenda, ORDEM); >> >> INSERT INTO TESTE (codvenda, ordem) values (1,1); >> INSERT INTO TESTE (codvenda, ordem) values (1,2); >> >> begin; >> -- tentando inverter ordem na mesma transação >> update teste set ordem = 2 where codvenda = 1 and ordem = 1; >> update teste set ordem = 1 where codvenda = 1 and ordem = 2; >> > > Independente do DEFERRED, tem um erro de lógica aí (por causa do WHERE). > Você está atualizando (no primeiro update) o registro com id=1, no segundo > update você "reatualiza" o mesmo registro (e o outro) já que para ele ordem > passa a ser 2, daí nem com deferred vai resolver. > > 2012/5/30 Leandro Guimarães Faria Corcete DUTRA <l...@dutras.org> > >> >> Acho que continua no TODO, já viu essa página? >> >> > Na verdade essa funcionalidade já existe, mas tem que usar uma chave > UNIQUE e não um índice. > > Exemplo: > > > CREATE TEMP TABLE TESTE (id serial not null, > codvenda integer, > ordem integer); > > ALTER TABLE teste ADD CONSTRAINT uk_codvendaordem UNIQUE (codvenda, ordem) > DEFERRABLE INITIALLY DEFERRED; > > Agora da seguinte forma funciona (considerando que os id's estão certos): > BEGIN; > UPDATE teste SET ordem = 2 WHERE id = 1; > UPDATE teste SET ordem = 1 WHERE id = 2; > COMMIT; > > Atenciosamente, > -- > Matheus de Oliveira > > Bacharelado em Ciências de Computação > Laboratório de Computação de Alto Desempenho - > LCAD<http://www.lcad.icmc.usp.br/> > Instituto de Ciências Matemáticas e de Computação - > ICMC<http://www.icmc.usp.br/> > Universidade de São Paulo - USP <http://www.sc.usp.br/> > > > > _______________________________________________ > pgbr-geral mailing list > pgbr-geral@listas.postgresql.org.br > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > -- Anselmo M. Silva
_______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral