powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / это норма или не норма? insert с проверкой на уникальность
5 сообщений из 5, страница 1 из 1
это норма или не норма? insert с проверкой на уникальность
    #39131434
Добрый вечер!
прошелся поиском по форуму посмотрел темы связанные с игнорированием дубликатов по UK/PK при вставке, но тема показалась не раскрытой.

У меня такой кейс. Допустим есть таблица:
Код: sql
1.
2.
3.
4.
create table test (
 id integer,
 primary key(id)
);



Выполняем запрос
Код: sql
1.
2.
3.
4.
insert into test (id)
	select a.id from (
	select 1 id) a
where not exists (select * from test where id = a.id)



Запрос вставил одну запись. Коммит не делаю, выполняю запрос еще раз. Вставил уже ноль записей.
Работает ожидаемо - ОК.
Делаю откат транзакции - ОК. Запись из таблицы исчезла.

Выполняю чуть модифицированный запрос вставки:
Код: sql
1.
2.
3.
4.
5.
6.
insert into test (id)
	select a.id from (
        select 1 id
        union all
	select 1 id) a
where not exists (select * from test where id = a.id)



и балалайка. Получаю ошибку нарушения уникальности.
Как это понимать? Направьте плиз, тут какие то принципиальные ограничения?

Спасибо
...
Рейтинг: 0 / 0
это норма или не норма? insert с проверкой на уникальность
    #39131464
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поролоновый слон тут какие то принципиальные ограничения?
не ограничения, а здравый смысл. селект формирует две строки в соответствии с отсутствием строк в таблицы на начало выполеения. понавыдумывать порядков выполнения декларативного языка можно множество, но в базах данных главное стабильность результтата.
...
Рейтинг: 0 / 0
это норма или не норма? insert с проверкой на уникальность
    #39131540
Фотография grufos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поролоновый слон,

в 9.5 уже встроили конструкцию в INSERT для работы с конфликтами
http://www.postgresql.org/docs/9.5/static/sql-insert.html

ON-CONFLICT
...
Рейтинг: 0 / 0
это норма или не норма? insert с проверкой на уникальность
    #39131732
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поролоновый слон,

это норма. почитайте про последовательность выполнения запросов, и тогда, думаю, станет понятно. если коротко, то INSERT будет добавлять не построчно (каждую запись отдельно) а целиком то что получил из SELECT'а, а во время SELECT такое значение как 1 в таблице отсутсвовало. так что - норма.
...
Рейтинг: 0 / 0
это норма или не норма? insert с проверкой на уникальность
    #39131812
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, а какое поведение ожидалось??
Что вставит одну запись а вторую нет?
А тогда сколько в выражении
Код: sql
1.
where not exists (select * from test where id = a.id)


раз должен был выполнятся подзапрос???? 2 чтоли???
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / это норма или не норма? insert с проверкой на уникальность
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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