Liquibase: Как установить значение по умолчанию для столбца даты "сейчас" в формате UTC?
Как вы устанавливаете значение по умолчанию для столбца даты "сейчас" в формате UTC? Я думаю, что ответ включает атрибут defaultValueComputed
в элементе столбца .
В документации указано:
defaultValueComputed Значение, возвращаемое функцией или вызов процедуры. Этот атрибут будет содержать функцию для вызова.
Какая langauge - это функция, на которую предполагается записать? Ява? Является ли функция, которая должна быть функцией даты в базе данных, конкретной функцией, которую я хочу использовать? Есть ли еще документация, которую я могу прочитать по этой теме?
Ответы
Ответ 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" />