Что эквивалентно метке времени / строке (SQL Server) с PostgreSQL - PullRequest
5 голосов
/ 14 ноября 2009

Может ли кто-нибудь помочь мне найти эквивалент Timestamp / Rowversion (SQL Server) с PostgreSQL?

Я использую NHibernate на Mono (UNIX).

Я думаю, что Timestamp (PostgreSQL) является эквивалентом Datetime (SQL Server) - это не то, что я ищу .

Редактировать 1: для тех, кто не знает, что такое метка времени / Rowversion в SQL Server: http://msdn.microsoft.com/en-us/library/ms182776.aspx (в основном используется для оптимистичного параллелизма)

Ответы [ 4 ]

4 голосов
/ 16 ноября 2009

См. Раздел системные столбцы в документации PostgreSQL. В частности, xmin может быть тем, что вы ищете.

Но будьте осторожны, используя любые системные столбцы. По определению они зависят от реализации, и детали некоторых из них могут измениться в будущих версиях.

0 голосов
/ 15 апреля 2019

Ключевым моментом, который упускается, является то, что тип версии строки изменяется каждый раз, когда происходит обновление строки, даже если чистый результат таков, строка не изменяется.

CREATE TABLE MyTest (myKey int PRIMARY KEY  
    ,myValue int, RV rowversion);  
GO   
INSERT INTO MyTest (myKey, myValue) VALUES (1, 0);  
GO   
INSERT INTO MyTest (myKey, myValue) VALUES (2, 0);  
GO  

select * from MyTest
Go

update MyTest set myValue = 0 
go

/* row version will have changed */
select * from MyTest
Go

Единственный выбор, который я нашел, - создать триггер обновления.

0 голосов
/ 07 декабря 2015

Вы можете создать его вручную:

  1. Создать последовательность
  2. Создать триггер для вставки и обновления для каждой таблицы, содержащей столбец версии строки
  3. Установить столбец версии строки из последовательности
0 голосов
/ 15 ноября 2009

Если я правильно понимаю, версия строки совпадает с serial ? Если нет - вам придется создавать свои собственные с помощью триггеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...