Текущий момент в базе данных 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";
Другие вопросы по тегам