@lightseeker

Соблюдается ли очередь данных при нескольких bulk-insert операциях?

Есть 2 команды, которые выполняются одновременно
INSERT INTO test_table (name) VALUES ('A'), ('B'), ('C), ('D'), ('E')

INSERT INTO test_table (name) VALUES ('F'), ('G'), ('H), ('I'), ('J')

Могут ли их primary key id смешиватЬся?
То есть, если запросить дату с ORDER BY id, и получить

1, A // из первого скрипта
2. F // из второго скрипта
3 B // из первого скрипта
4 G // из второго скрипта


Или всегда это будет вставлено поочередно? Ну, скажем, - сначала целиком первый или второй, смотря кто раньше пришёл ?
  • Вопрос задан
  • 92 просмотра
Решения вопроса 2
Порядок данных при выборке никогда не гарантируется.
Порядок вставки тоже, при выполнении конкурирующих запросов.
Гарантируется только то, что у двух разных записей будет разный PK
Ответ написан
Melkij
@Melkij
PostgreSQL DBA
Могут ли их primary key id смешиватЬся?
То есть, если запросить дату с ORDER BY id, и получить

Да.

За генерацию значений отвечают sequence (неважно каким именно способом объявлена таблица - default nextval явно созданного сиквенса, serial или generated identity - это всё будет сиквенс).
Сиквенс гарантирует только уникальность своих значений. Никаких гарантий порядка записи в таблицу он не даёт.

Два параллельных insert в postgresql так же друг друга никак не блокируют и исполняются конкурентно. Кто и в каком порядке надёргал nextval сиквенса потребное для своих данных количество раз - такие значения они и запишут.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы