Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / сортировка / 8 сообщений из 8, страница 1 из 1
16.12.2008, 21:19
    #35718437
LexaF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка
ребят, почему при изменении строки (UPDATE ...) в таблице, эта строка меняет свое местоположение? мож я че в настройках не сделал?

заранее спасибо.не судите за глупый вопрос
...
Рейтинг: 0 / 0
16.12.2008, 22:12
    #35718529
ivanmara
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка
Это так называемая "мультиверсионность" (MVCC (multi-version concurency control)) когда в рамках начатой транзакции по UPDATE физически создаться новая строка в таблице, в которой производятся изменения и, которая видна только в рамках этой тразакции. Старый же вариант доступен другим транзакциям пока работает ваша по UPDATE. Как только ваша транзакция успешно завершаться старая запись помечается "на удаление". новым транзакциям становиться видна новая запись которая физически расположена в конце таблицы (обычно). поэтому когда вы делаете select * from table без прямого указания порядка сортировки запрос вернёт вам строки в том порядке в котором они расположены на диске.
Что бы строки не "убегали в конец и находились на нужных местах" нужно:
1. создать serial поле по таблице (скажем "id") и назначить его как primary key индекс
2. использовать order by id в селектах.
3. использовать order by [название нужного поля] если сортировка нужна определенная
4. использовать возможности VACUUM для удаления ненужных записей
5. читать теоретический материал на предмет организации версонности sql баз данных:
http://www.citforum.ru/database/articles/multiversion/
http://oraclemind.blogspot.com/2007/08/blog-post.html
http://www.ibase.ru/devinfo/mga.htm (только для ознакомления на примере firebird, не брать за основную концепцию postgresql)

Успехов в начинании.
...
Рейтинг: 0 / 0
16.12.2008, 23:00
    #35718597
LexaF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка
ivanmara
3. использовать order by [название нужного поля] если сортировка нужна определенная
...я так и делал (сортировал по id). Просто думал может че настроить надо при администрировании базы , чтоб не сортировать каждый раз (как то мне это неграмотным показалось).

СПАСИБО за исчерпывающий ответ!
...
Рейтинг: 0 / 0
16.12.2008, 23:02
    #35718598
eddie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка
ivanmara,

вы куда-то не туда углубились :)

в sql порядок выдачи строк в результате не определён (если он не задан явно при помощи order by).
...
Рейтинг: 0 / 0
16.12.2008, 23:06
    #35718607
LexaF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка
ivanmara
1. создать serial поле по таблице (скажем "id") и назначить его как primary key индекс
3. использовать order by [название нужного поля] если сортировка нужна определенная
и посоветуйте пожалуйста какой из этих вариантов более предпочтительней для моего случая:мне нужно просто чтоб всегда был правильный порядок по id и все, строк в таблице > 1 млн.(если это важно)
...
Рейтинг: 0 / 0
16.12.2008, 23:07
    #35718608
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка
LexaF пишет:
> ребят, почему при изменении строки (UPDATE ...) в таблице, эта строка
> меняет свое местоположение? мож я че в настройках не сделал?

в таблице нет местоположения строк. Поэтому и меняться нечему.
Ты просто один раз выводишь данные, строка появляется в одном
месте, другой - в другом. Это - можно сказать случайный процесс.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
16.12.2008, 23:10
    #35718613
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка
ivanmara пишет:
> Это так называемая "мультиверсионность" (MVCC (multi-version concurency
> control))

MVCC тут абсолютно ни при чём. В таблице порядок запирей не определяется.

> 2. использовать order by

Вот этого достаточно. Необходимое и достаточное условие отсортированности
записей - наличие order by
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
16.12.2008, 23:17
    #35718623
LexaF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка
всем спасибо!.. не ожидал таких дискуссий по этому поводу =)
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / сортировка / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]