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
