powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как работает WITH и INSERT/UPDATE ?
7 сообщений из 7, страница 1 из 1
Как работает WITH и INSERT/UPDATE ?
    #39116584
Kvasnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE "test" (
 field int4
);

WITH
inserted AS (INSERT INTO test SELECT 3)
UPDATE test SET field = 5;



Почему
SELECT * FROM test;
возвращает 3

Такое ощущение, что test кешируется на момент старта запроса и insert не учитывается при update'е
...
Рейтинг: 0 / 0
Как работает WITH и INSERT/UPDATE ?
    #39116588
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kvasnikov,

К inserted нет обращения. Куда там кешировать твои ощущения?
...
Рейтинг: 0 / 0
Как работает WITH и INSERT/UPDATE ?
    #39116607
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
p2.,

Немного не так. В RTFM написано.
Если очень коротко, то:
1. Выполняется подзапрос inserted, но его результат не доступен из основного запроса.
2. Выполняется основной запрос. Но так как результат подзапроса ему не доступен, то будут модифицированы все 0 строк, которые ему доступны в таблице.

В итоге имеем то, что имеем.
...
Рейтинг: 0 / 0
Как работает WITH и INSERT/UPDATE ?
    #39116629
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ursido,

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

Возможно тут дело в том, что обе части работают с одной и той же таблицей атомарно — до завершения запроса в таблице данных нет, потому UPDATE и не имеет эффекта.
...
Рейтинг: 0 / 0
Как работает WITH и INSERT/UPDATE ?
    #39116643
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorov,

авторThe sub-statements in WITH are executed concurrently with each other and with the main query. Therefore, when using data-modifying statements in WITH, the order in which the specified updates actually happen is unpredictable. All the statements are executed with the same snapshot (see Chapter 13), so they cannot "see" one another's effects on the target tables.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
BEGIN;
CREATE TABLE "test" (
 field int4
);

WITH
inserted AS (INSERT INTO test SELECT 3 /* RETURNING * */ )
,up AS (UPDATE test SET field = 5 /*RETURNING * */)
DELETE FROM test;
SELECT * FROM test;

...
Рейтинг: 0 / 0
Как работает WITH и INSERT/UPDATE ?
    #39116656
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,

Спасибо, искал именно эту часть и “недоискал”.
...
Рейтинг: 0 / 0
Как работает WITH и INSERT/UPDATE ?
    #39116660
Kvasnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо!
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как работает WITH и INSERT/UPDATE ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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