Текущий момент в базе данных H2
Как получить фактическое текущее время, текущий момент в базе данных H2?
CURRENT_TIMESTAMP
Функция дает момент начала текущей транзакции базы данных. Есть ли способ получить текущий момент, время, когда выполняется текущий оператор? Это может быть то же самое или позже, чем CURRENT_TIMESTAMP
,
Для сравнения, в Postgres, некоторые функции, такие как current_timestamp
вернуть время начала транзакции, в то время как некоторые функции, такие как clock_timestamp
вернуть текущее текущее время часов.
1 ответ
Текущее время (вызова функции)
Вы могли бы создать ALIAS
за System.currentTimeMillis()
:
CREATE ALIAS CURRENT_TIME_MILLIS FOR "java.lang.System.currentTimeMillis";
Это не будет генерировать временную метку начала выполнения оператора, но на самом деле текущую временную метку всякий раз, когда H2 фактически вызывает функцию - то есть недетерминированный момент и, возможно, другое значение для разных строк в одном и том же операторе.
Но, возможно, этого достаточно для ваших требований.
Текущее время (выполнения выписки)
Если указанное выше недетерминированное решение не является достаточно точным для вас, другой вариант может заключаться в реализации оболочки JDBC, которая перехватывает все операторы, устанавливает текущее время для некоторого локального потока (H2 не поддерживает Connection.getClientInfo()
):
threadlocal.set(new Timestamp(System.currentTimeMillis()).toString());
... а затем читает эту информацию клиента из ALIAS
как это:
public static Timestamp statementTime() throws SQLException {
return Timestamp.valueOf(threadlocal.get());
}
А потом:
CREATE ALIAS STATEMENT_TIME FOR "com.example.statementTime";