Re: [pgsql-ru-general] Re: [pgsql-ru-general] Re[2]: [pgsql-ru-general] Re[2]: [pgsql-ru-general] Re: [pgsql-ru-general] порядок вставки
От | Andrey Asyakin |
---|---|
Тема | Re: [pgsql-ru-general] Re: [pgsql-ru-general] Re[2]: [pgsql-ru-general] Re[2]: [pgsql-ru-general] Re: [pgsql-ru-general] порядок вставки |
Дата | |
Msg-id | CAFnzpOW0Q1J75B7QHF2JaWYcbGVdioOmS+D--q__XsjJy8b=tw@mail.gmail.com обсуждение исходный текст |
Ответ на | Re[2]: [pgsql-ru-general] Re: [pgsql-ru-general] порядок вставки (Иван Фролков <ifrol2001@mail.ru>) |
Список | pgsql-ru-general |
что касается второго, видимо, может. это ж обычный запрос, подчиняется общим правилам планировщика.. with, по сути, более удобная форма записи подзапросов, так что order by в итоговом селект не помешает, кажись. хотя в твоем случае на практике скорей всего все будет работать правильно и без order by.
насчет первого, опять не уверен, что понял правильно. именно вот так:
WITH "a" AS (
SELECT ..
),
"b" AS (
SELECT
...
"a"
)
INSERT INTO ... SELECT * FROM "a";
???
если да, то не повлияет. а это уже сформированный набор строк, типа временной таблицы или подзапроса, на нее не повлияет выборка из нее. b AS ( ) просто для примера? а то как то бессмысленно выглядит)
насчет первого, опять не уверен, что понял правильно. именно вот так:
WITH "a" AS (
SELECT ..
),
"b" AS (
SELECT
...
"a"
)
INSERT INTO ... SELECT * FROM "a";
???
если да, то не повлияет. а это уже сформированный набор строк, типа временной таблицы или подзапроса, на нее не повлияет выборка из нее. b AS ( ) просто для примера? а то как то бессмысленно выглядит)
ну и еще раз, на всякий, в любом случае
INSERT INTO dest SELECT * FROM source; - не важно, откуда возвращает данные SELECT, в dest они будут вставляться в том же порядке, в каком их возвращает SELECT
INSERT INTO dest SELECT * FROM source; - не важно, откуда возвращает данные SELECT, в dest они будут вставляться в том же порядке, в каком их возвращает SELECT
20 октября 2015 г., 15:45 пользователь Dmitry E. Oboukhov <unera@debian.org> написал:
> Я по другому понял вопрос, может ли в запросе insert .. select записи
> вставиться не в том порядке, в котором их возвращает select. Насколько я понял,
> нет, потому что для инсерта не создается какого то особого плана, план
> создается для селекта, просто вместо отправки клиенту записи пишутся в таблицу.
Да вопрос именно в этом.
интересно: может ли выборка секции WITH быть пересортирована в
процессе выполнения другого подзапроса WITH
WITH "a" AS (
SELECT ..
),
"b" AS (
SELECT
...
"a"
)
INSERT INTO ... SELECT * FROM "a";
это первый непонятный кейз
и второй
может ли выборка секции WITH быть пересортирована в процессе
хранения/просто выборки из нее:
SELECT * FROM "a"
строит же план? или всегда выберет из виртуальной таблицы в том
порядке в котором выбралось?
то есть в общем-то хочется понимания о том как устроено хранилище
промежуточных результатов WITH: что там, plain массив или может быть
например hash?
> что то я не пойму насчет WITH, зачем он? если формируешь сам, чем не устраивает
> INSERT TO "billing_log"
> ("rollback", "sum", "txnname")
> VALUES
> (TRUE, -123, 'заказ 342'),
> (FALSE, 10, 'заказ 342')
ну тут я развернул для ясности что я хочу получить, но на практике оба
значения - выборки with
--
. ''`. Dmitry E. Oboukhov
: :’ : email: unera@debian.org jabber://UNera@uvw.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)
iEUEAREDAAYFAlYmN4QACgkQq4wAz/jiZTcrOwCYk+hBbI9zRBvJXRolXvTJ6n4q
/wCgmPf7oZOHDoHRJpfHQGjrv0SUNpg=
=GkFE
-----END PGP SIGNATURE-----
В списке pgsql-ru-general по дате отправления: