Подтвердить что ты не робот

Liquibase: Как установить значение по умолчанию для столбца даты "сейчас" в формате UTC?

Как вы устанавливаете значение по умолчанию для столбца даты "сейчас" в формате UTC? Я думаю, что ответ включает атрибут defaultValueComputed в элементе столбца .

В документации указано:

defaultValueComputed Значение, возвращаемое функцией или вызов процедуры. Этот атрибут будет содержать функцию для вызова.

Какая langauge - это функция, на которую предполагается записать? Ява? Является ли функция, которая должна быть функцией даты в базе данных, конкретной функцией, которую я хочу использовать? Есть ли еще документация, которую я могу прочитать по этой теме?

4b9b3361

Ответ 1

Возможно, этот раздел на форуме Liquibase поможет?

Я думаю, что defaultValueComputed возьмет функцию конкретной базы данных, чтобы выразить "сейчас". В mySQL это будет CURRENT_TIMESTAMP, чтобы оно выглядело так:

<createTable tableName="D_UserSession">
    <column name="ts" type="TIMESTAMP" defaultValueComputed="CURRENT_TIMESTAMP"/>
</createTable>

(Скопировано из сообщения форума.)

Ответ 2

Это работает с SQlite:

<column name="last_updated_at" type="TIMESTAMP" defaultValueComputed="CURRENT_TIMESTAMP">
                <constraints nullable="false"/>
</column>

Добавление "$ now" не помогло мне. Я использую SQlite в качестве базы данных.

Ответ 3

В MySQL для использования столбца DATETIME с долями секунды, например DATETIME(6) (точность микросекунд), используйте значение по умолчанию NOW(6) (предостережение: CURRENT_TIMESTAMP(6) по какой-то причине создает ошибку со мной, используя Liquibase 3.5.3 ):

<column name="created_at" type="DATETIME(6)" defaultValueComputed="NOW(6)" >
   <constraints nullable="false" />
</column>

Обратите внимание, что значение будет храниться внутри UTC, но прочитайте с использованием настроек часового пояса сервера (@@global.time_zone, @@session.time_zone).

Ответ 4

Это сработало для меня:

<property name="now" value="UNIX_TIMESTAMP()" dbms="mysql"/>
<column name="ts" type="timestamp" valueDate="${now}"/>

Я нашел это благодаря этому ответу: fooobar.com/questions/207774/...

Ответ 5

Поскольку липибаза является общим списком изменений для любой базы данных, чтобы сделать ее общей, вы не должны зависеть от какой-либо конкретной базы данных, такой как oracle, postegres, mysql, но она должна быть достаточно обобщенной для работы в любой/каждой базе данных.

Ниже описано, как это должно быть реализовано:

<column name="time" type="${type.datetime}" defaultValueComputed="${column.datetime.defaultValue}"/>

Это должно работать для всех баз данных, для oracle оно вставляет SYSTIMESTAMP как DATA_DEFAULT.

Ответ 6

Я использовал функцию поставщика базы данных. Для Oracle это sysdate:

<column name="create_date" type="DATETIME" valueDate="sysdate" defaultValueComputed="sysdate" />