Digo assim, conforme vamos inserindo registros, fisicamente eles são gravados 
no disco em uma determinada posição, independente se foi Insert ou Append
Isso chamo de posição natural dos registros, um Select simples sem order by não 
deveria e nem precisaria se preocupar em ordenar de alguma forma isso,
a menos que o postgres faça uma leitura randômica ou seletiva para trazer a 
consulta em menor tempo possível, ou seja, 
já que não foi especificado o order by ele julga o que for melhor pro banco, 
nesse caso é interessante como eles pensaram nisso.

No caso da marcação do registro atualizado, a meu ver isso só deveria acontecer 
em registro deletados (delete) e não atualizados (update), 
mas isso é só questão de curiosidade mesmo, pois se eles fizeram assim é porque 
realmente foi necessário.

Entendo que o vaccum organiza tudo isso, mas achei estranho esse modo e criar 
um novo registro ao invés de usar o mesmo, 
pode ser que o postgres não trabalhe com linhas e colunas por isso essa 
necessidade, me parece que o Oracle é assim, não é?



Marcelo Silva
-------------------------------------------------------------
Desenvolvedor: Delphi, PHP, ASP

Cel: (11) 95052-1407 Tim
Cel: (11) 99693-4251 Vivo
msn: [email protected]

Empresa: Perfil Medicina e Segurança do Trabalho


From: JotaComm 
Sent: Friday, November 23, 2012 11:10 AM
To: Comunidade PostgreSQL Brasileira 
Subject: Re: [pgbr-geral]Postgres muda a posição do registro no update?

Olá,


Em 23 de novembro de 2012 10:58, Marcelo Silva <[email protected]> escreveu:

  Sim, o order by me garante a ordem exata que preciso (pelo menos
  pressupõe-se, rsrsrs)


Sim, ORDER BY ordernará de maneira que você especificar.


  Quando damos um SELECT * FROM TABELA (sem order by) pressupõem-se que os
  registros viram numa ordem natural em que foram inseridos,
  um resultado foram disso seria um tanto quanto estranho.


Baseado no que você pressupõe isso?


  Por exemplo, se dou um INSERT ele coloca o registro imediatamente antes do
  registro posicionado,
  se dou um append, ele vai até o ultimo registro e coloco após este.

  Quanto a saber a ordem em que estão dos registro sem um order by,
  a minha dúvida é simplesmente pra saber porque o postgres não mantem a ordem
  "natural"


Talvez a teoria dos conjuntos e o entendimento de como funcionam os blocos de 
disco a nível físico deem uma visão mais clara a você.


  Em uma tabela DBF por exemplo, quando a abrimos ele mostra a ordem natural
  em que foram inseridos os registros
  se damos um update ele simplesmente atualiza a linha em questão e mantem a
  posição natural
  Pelo que vi, em bases como o Firebird, MySQL ele mantém essa ordem natural,
  pelo menos visivelmente, internamente não estudei o caso.
  Já o postgres como dito cancela o registro atual e insere um novo,
  interessante isso,
  mas ao mesmo tempo fico me perguntando se isso levaria a um inchaço
  desnecessário (olha quem está falando, rsrsrs) na base.
  E não tornaria o update mais lento ?


Não é que o PostgreSQL cancela o registro atual, ele faz uma marcação de bloco, 
e gera um novo registro com a linha atualizada. Isso te ajuda a entender um 
pouco o VACUUM também :)


  Será que esse procedimento adotado seria pra um caso de um desastre na base
  para a recuperação de dados antigos ?


Não entendi esta última frase sua. 



  Marcelo Silva
  -------------------------------------------------------------
  Desenvolvedor: Delphi, PHP, ASP

  Cel: (11) 95052-1407 Tim
  Cel: (11) 99693-4251 Vivo
  msn: [email protected]

  Empresa: Perfil Medicina e Segurança do Trabalho


  -----Mensagem Original-----
  From: Osvaldo Kussama
  Sent: Friday, November 23, 2012 10:35 AM
  To: Comunidade PostgreSQL Brasileira
  Subject: Re: [pgbr-geral]Postgres muda a posição do registro no update?


  Em 23/11/12, Marcelo Silva<[email protected]> escreveu:
  > Pessoal, o postgres muda a posição do registro quando é executado um
  > update,
  > é isso mesmo ?
  >
  > Por exemplo, tenho as linhas:
  >
  > Nome  Qtd
  > Joao       3
  > Maria     2
  > Jose       1
  >
  > Se eu mudo a quantidade, fica
  >
  > Nome   Qtd
  > Maria      2
  > Joao        4
  > Jose        2
  >
  > Sem o uso de “order by” percebe-se que ele muda a posição
  >


  Em um comando SELECT o PostgreSQL só garante uma ordem dos registros
  retornados se for especificada a cláusula ORDER BY.

  Osvaldo
  _______________________________________________
  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


Abraços
-- 
JotaComm
http://jotacomm.wordpress.com



--------------------------------------------------------------------------------
_______________________________________________
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

Responder a