Em 10 de outubro de 2011 22:02, Shander Lyrio
<[email protected]> escreveu:
> Em 10/10/2011 20:08, Tiago Adami escreveu:
>> Ok, mas imagine que há outra aplicação conectada ao banco de dados e
>> insere um registro. Como o aplicativo (persistência) saberá que o
>> objeto existe no banco, mas não na memória?
>
>        Isto é uma limitação da sua aplicação, linguagem, ou de sua escolha do 
> ORM.
>        Veja esta query que meu ORM SqlAlchemy gera e que eu postei em mensagem
> imediatamente anterior:
>
> insert into clientes(chaveprimaria, cliente)
> values(nextval('chaveprimaria'), ?) returning chaveprimaria;
>
>        Não importa de onde venha a inclusão, nunca haverá repetição de chave
> primária nem erro na inserção pois o próprio PostgreSql retornará um
> inteiro com o valor da sequence utilizado para persistir o objeto.
>

Ok, entendi. Mas isto só se aplica quando você está usando SEQUENCES
em chaves primárias - possivelmente artificiais. Isto não funcionaria
com chaves naturais, do tipo CHAR ou VARCHAR, por exemplo. Agora
começo entender porque os arquitetos de software vivem reclamando
quando recuso a criação de chaves artificiais (geralmente colunas com
nome "ID" do tipo Integer) só porque "fica mais fácil trabalhar com
Hibernate" :)

>> Certa vez já tive que fazer _quase_ isso para simular o comando
>> "MERGE" de outro SGBD, e não tive outra opção a não ser criar um
>> programa que tentasse inserir, e no caso de violação da PK tratava o
>> erro em código fazia um UPDATE.
>
>        Merge de um SGDB? Qual SGDB faz merge e como funciona isso? Está
> falando de juntar os dados de dois bancos de dados em um único? O que
> isto tem haver com ORM?
>

MERGE do IBM DB2, que faz exatamente o que você quer. Assim como o
Osvaldo já mencionou em um post posterior, o Oracle também tem um. Só
faltou isso no Elefante... seria ótimo para ETL.

-- 
TIAGO J. ADAMI
http://www.adamiworks.com
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a