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));

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.

É isso.

-Leo
-- 
Leonardo Cezar
http://pgcon.postgresql.org.br
http://www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a