On Mon, Apr 9, 2012 at 10:51 AM, Tulio Santos <[email protected]>wrote:
> Olá, > > Não sei se entendi bem sua duvida, mas confira os exemplos no link[1] > > [1] - http://www.postgresql.org/docs/8.1/static/sql-insert.html > > Att, > Tulio > > ------------------------------ > *De:* Raphael Mattos <[email protected]> > *Para:* [email protected] > *Enviadas:* Segunda-feira, 9 de Abril de 2012 10:30 > *Assunto:* [pgbr-geral] Insert or Update > > > Olá, sou novo no mundo Postgresql, e gostaria de saber se existe algum > comando para inserir ou atualizar de uma única vez como no Mysql . > No MySQL, por exemplo, vc pode usar o comando: > Insert cliente (id,codigo, nome) values (1,'000001', 'José') > on duplicate key update > nome = 'José da Silva'; > -- > *Raphael Filipe Mattos * > * Desenvolvimento* > > > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > > > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > Não. O PostgreSQL não possui upsert, apesar de que há muitas discussões nas listas para implementar-se o comando MERGE. Mas, claro que existem alternativas. Uma que gosto bastante é realizar um UPDATE primeiro e verificar quais as tuplas NÃO foram atualizadas, dá pra fazer isso com um único comando (apesar de meio grandinho). Ex: with vals (id, codigo, nome) as ( -- Valores que serão inseridos ou atualizados (pode ser mais de um: union all) values(1, '000001', 'José') union all values(2, '000002', 'João') ), updated (id) as ( -- Faz um update e retorna apenas os ID's que foram atualizados update cliente set codigo = v.codigo, nome = v.nome from vals v where cliente.id = v.id returning cliente.id -- retorna os ID's ) -- Insere somente os que não foram atualizados (not in) insert into cliente(id, codigo, nome) select * from vals where id not in ( select id from updated -- O update de fato só acontece mesmo aqui ); Veja se deu pra entender. Att. -- 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 [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
