2008/6/20 Leonardo Cezar <[EMAIL PROTECTED]>:
> 2008/6/19 Ribamar Sousa <[EMAIL PROTECTED]>:
> > 2008/6/19 Osvaldo Rosario Kussama <[EMAIL PROTECTED]>:
>
> > E a coisa tem a ver com o índice interno do SGBD, que é o OID, que a cada
> > update é alterado, alterando a ordem.
>
> Errado. A coisa não tem nada a ver com OIDs de tuplas, porque estes
> são estáticos em operações de UPDATE, e graças a Deus, porque de outra
> maneira /id wraparounds/ aconteceriam de forma bem mais frequente.
>
> Tem a ver com CTIDs que são indicadores internos da *versão* da linha.
> Estes sim alteram com atualizações.
>
> CREATE TABLE foo(bar integer);
> INSERT INTO foo VALUES(1),(2),(3);
>
> SELECT * FROM foo WHERE CTID = '(0,1)'; -- deve trazer o valor 1;
>
> UPDATE foo SET bar = 0 WHERE bar = 1;
> SELECT foo.CTID,foo.OID,foo.*; -- deve ter movido CTID para bloco 0 e
> versão 1 ((0,1));
>
Aqui acusa que não tenho foo.OID (minha versão? 8.2.9).
>
> Agora:
>
> SELECT currtid2('foo'::NAME,'(0,1)'::TID); -- deve retornar a versão
> atual do TID ((0,4));
>
> Porém:
> SELECT * FROM foo WHERE CTID = '(0,1)'; -- não deve mais retornar o
> valor, porque a versão da linha foi alterada.
>
Testei e realmente ocorre assim.
Valeu Leo.
--
Ribamar FS - [EMAIL PROTECTED]
http://ribafs.net
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral