PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

INSERT и сериализация на транзакция в PostreSQL

Като цяло не. Втората транзакция е само вмъкване, така че освен ако няма уникална проверка на индекса или друг тригер, който трябва да се извърши, данните могат да бъдат вмъкнати безусловно. В случай на уникален индекс (включително първичен ключ), той ще блокира, ако и двете транзакции актуализират редове с една и съща стойност, напр.:

-- Session 1                           -- Session 2
CREATE TABLE t (x INT PRIMARY KEY);
BEGIN;
INSERT INTO t VALUES (1);
                                       BEGIN;
                                       INSERT INTO t VALUES (1);  -- blocks here
COMMIT;
                                       -- finally completes with duplicate key error

Нещата са по-малко очевидни в случай на актуализации, които могат да повлияят на вмъкванията от друга транзакция. Разбирам, че PostgreSQL все още не поддържа „истинска“ сериализация в този случай. Не знам колко често се поддържа от други SQL системи.

Вижте http://www.postgresql.org/docs/current/interactive/ mvcc.html



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как работи функцията to_number() в PostgreSQL

  2. Как да дефинирам последователността, която да използвам при създаване на таблица в миграцията на ActiveRecord в Ruby on Rails 5.2?

  3. Сложно ограничение на външния ключ в SQLAlchemy

  4. Как да сравним текущия ред със следващия и предишния ред в PostgreSQL?

  5. Как да възстановя конкретни данни от предишно архивиране на Postgres Heroku? (Напр. Случайно изтрити редове)