From: | Andrey Asyakin <asan999(at)gmail(dot)com> |
---|---|
To: | "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org> |
Cc: | Иван Фролков <ifrol2001(at)mail(dot)ru>, pgsql-ru-general(at)postgresql(dot)org |
Subject: | Re: [pgsql-ru-general] Re[2]: [pgsql-ru-general] Re[2]: [pgsql-ru-general] Re: [pgsql-ru-general] порядок вставки |
Date: | 2015-10-20 12:28:53 |
Message-ID: | CAFnzpOVDq58Zh9hzWDaJLo_39OAyqsaReb82OU=m9ZLeOFz-sQ@mail.gmail.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-ru-general |
>
> а SELECT * FROM "with_results" может отличаться в порядке?
Надо бы смотреть доку по WITH.
Можно подстраховаться,
with a ( select 1 n, ...),
b ( select 2 n, ...),
c ( ... union all ...)
insert into t(z, x) select z, x from c order by n
Я по другому понял вопрос, может ли в запросе insert .. select записи
вставиться не в том порядке, в котором их возвращает select. Насколько я
понял, нет, потому что для инсерта не создается какого то особого плана,
план создается для селекта, просто вместо отправки клиенту записи пишутся в
таблицу.
что то я не пойму насчет WITH, зачем он? если формируешь сам, чем не
устраивает
INSERT TO "billing_log"
("rollback", "sum", "txnname")
VALUES
(TRUE, -123, 'заказ 342'),
(FALSE, 10, 'заказ 342')
20 октября 2015 г., 12:39 пользователь Dmitry E. Oboukhov <unera(at)debian(dot)org>
написал:
>
> >> в таблицу записываем произошедшие одно за другим события.
> >> SERIAL в первичном ключе таким образом определяет какое событие было
> >> раньше какое позже (таймстемп тоже есть, но он больше декоративный)
> >> поэтому порядок INSERT'ов мне важен.
> > Вы поступаете неправильно, и вот почему - во-первых, такие вставки могут
> идти параллельно, и тогда порядок становится совсем уж странным; во-вторых,
> порядок вставки при insert действительно не определен (при каком-то другом
> объеме данных и положении звезд сервер может изменить план и порядок будет
> совсем иным); и то, что оно иногда (а то и практически всегда) может
> работать так, как вам надо - не более чем совпадение. Я бы набрался
> наглости и посоветовал бы либо сделать timestamp не декоративным, либо
> ввести какой-то свое значение для упорядочивания).
>
> про параллельные вставки я все понимаю.
>
> те что идут параллельно - они (так устроена система) не предъявляют
> требований к тому что одна может записаться раньше другой
>
> основной поток делает один INSERT и все
>
> но вот есть конкретно случаи, когда требуется сохранить
> последовательность и соответственно там требуется атомарно записать
> две записи в БД.
>
> я в соседнем письме описал задачу более подробно
> --
>
> . ''`. Dmitry E. Oboukhov
> : :’ : email: unera(at)debian(dot)org jabber://UNera(at)uvw(dot)ru
> `. `~’ GPGKey: 1024D / F8E26537 2006-11-21
> `- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.10 (GNU/Linux)
>
> iEYEAREDAAYFAlYmC9IACgkQq4wAz/jiZTe1ugCgxCvt2YvBgyXAjbB0CFoLNNa7
> wyUAn2weG+s6/AzeDJxDSZvhCG+aEy9O
> =QRLu
> -----END PGP SIGNATURE-----
>
>
From | Date | Subject | |
---|---|---|---|
Next Message | Dmitry E. Oboukhov | 2015-10-20 12:45:56 | Re: Re: [pgsql-ru-general] Re[2]: [pgsql-ru-general] Re[2]: [pgsql-ru-general] Re: [pgsql-ru-general] порядок вставки |
Previous Message | Dmitry E. Oboukhov | 2015-10-20 09:39:30 | Re: Re[2]: [pgsql-ru-general] Re[2]: [pgsql-ru-general] Re: [pgsql-ru-general] порядок вставки |