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

Атомно зададена SERIAL стойност при извършване на транзакция

Postgres 9.5 въведе нова функция, свързана с този проблем:времеви отпечатъци за ангажиране .

Просто трябва да активирате track_commit_timestamp в postgresql.conf (и рестартирайте!), за да започнете да проследявате времевите клеймца на ангажиментите. След това можете да направите заявка:

SELECT * FROM tbl
WHERE  pg_xact_commit_timestamp(xmin) >= '2015-11-26 18:00:00+01';

Прочетете главата „Проследяване на времеви клеймото за извършване“ в Postgres Wiki.
Свързана помощна програма функции в ръководството .

Променливостта на функцията е само VOLATILE защото идентификаторите на транзакции (xid ) може да се обвива по дефиниция. Така че не можете да създадете функционален индекс върху него.
Можете да фалшифицирате IMMUTABLE нестабилност в обвивка на функция за приложения в ограничен период от време, но трябва да сте наясно с последиците. Свързан случай с повече обяснения:

За много случаи на употреба (като вашия?), които се интересуват само от последователността на ангажиментите (а не от абсолютното време), може да е по-ефективно да работите с xmin прехвърляне към bigint "директно" (xmin::text::bigint ) вместо времеви отпечатъци за ангажиране. (xid е вътрешно цяло число без знак, горната половина не се вписва в integer със знак .) Отново имайте предвид ограниченията, дължащи се на възможно обвиване на xid.

По същата причина клеймата за време на ангажимент не се запазват за неопределено време . За малки до средни бази данни, xid wraparound почти никога не се случва - но в крайна сметка ще стане, ако клъстерът е жив достатъчно дълго. Прочетете главата „Предотвратяване на неуспешно обгръщане на ID на транзакция“ в ръководството за подробности.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Стъпка по стъпка postgres_fdw

  2. Какво е правилото за „неизвестен“ и извод за тип?

  3. Невалиден брой и сума в кръстосана заявка с помощта на PostgreSQL

  4. Поточно предаване на данни от Postgres в Python

  5. Избягвайте грешка PG::InvalidTextRepresentation, когато използвате Postgres UUID в Rails