LINUX.ORG.RU

Что-то не так с постгресом


0

0

Как-то раньше не замечал если изменить запись в таблице и сделать select без указания порядка сортировки то эта обновленная запись будет выдана последней. У вас также? Версия 8.4


А почему тебя это беспокоит? Вообще-то субд может вообще как попало выдавать записи, если явно порядок сортировки не задан, и это соответствует стандарту.

anonymous4
()
Ответ на: комментарий от anonymous4

Беспокоит тем что раньше я такого не замечал, я прекрасно понимаю что надо указывать порядок.

Fray
() автор топика

> У вас также? Версия 8.4

Да, у нас также. Версия 7.9

Torvus
()

почти в большенстве СУБД будет именно так, но на это надеяться нельзя

Pi ★★★★★
()

Думаю, это связано с тем, что измененная запись будет положена в конец странички (ну, или дальше куда-нибудь), а не на то же место.

Kpoxman ★★
()
Ответ на: комментарий от iZEN

> В реляционной алгебре порядок не определён.

ну вот, набижало умников. Ну и сидите в своей реляционной алгебре, а сортируйте на клиенте. удачи с top-n запросами.

Если обновленная запись выдается в конце - не значит ли это что при UPDATE ее перекладывают в конец, и большое количество UPDATE'ов приведет к тому, что даже то, что INSERT-нули одновременно, будет раскидано по всей таблице?

gods-little-toy ★★★
()
Ответ на: комментарий от gods-little-toy

Не знаю. Возможно, такие перестановки только в пределах страницы могут происходить (по primary key сортировка).

Kpoxman ★★
()
Ответ на: комментарий от gods-little-toy

> Если обновленная запись выдается в конце - не значит ли это что при UPDATE ее перекладывают в конец, и большое количество UPDATE'ов приведет к тому, что даже то, что INSERT-нули одновременно, будет раскидано по всей таблице?

конечно. только не «перекладывают в конец», а кладут в свободное место, оно может быть и в середине таблицы если запись или версию записи оттуда удалили и vacuum пометил её как свободную. если внутри таблицы свободного места нет, то будет выделено место в конце таблицы и новая запись или новая версия записи попадёт туда.

Eshkin_kot ★★
()
Ответ на: комментарий от gods-little-toy

>ну вот, набижало умников. Ну и сидите в своей реляционной алгебре, а сортируйте на клиенте. удачи с top-n запросами.

ORDER BY на что?

>Если обновленная запись выдается в конце - не значит ли это что при UPDATE ее перекладывают в конец, и большое количество UPDATE'ов приведет к тому, что даже то, что INSERT-нули одновременно, будет раскидано по всей таблице?

А это тебя не должно волновать, пока нет необходимости в оптимизации I/O.

WFrag ★★★★
()
Ответ на: комментарий от Pi

>почти в большенстве СУБД будет именно так, но на это надеяться нельзя

Это не зависит от того, блокировочник или версионник?

Я бы предположил, что такое поведение естественно для версионника, но не для блокировочника.

WFrag ★★★★
()
Ответ на: комментарий от WFrag

> А это тебя не должно волновать, пока нет необходимости в оптимизации I/O.

Что делать, если есть необходимость?

Kpoxman ★★
()
Ответ на: комментарий от Kpoxman

>Что делать, если есть необходимость?

Это уже зависит от ситуации и СУБД. На что-то можно влиять, на что-то — нет.

Например, вот: http://www.postgresql.org/docs/8.4/static/sql-cluster.html

Но это — для оптимизации, а не для получения желаемого поведения.

WFrag ★★★★
()
Ответ на: комментарий от WFrag

А как по дефолту выравниваются записи на страничке? По primary key, я так понимаю.

Но не нашел, где об этом явно сказано.

Kpoxman ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.