Документация по сопоставлению типов данных Liquibase

Извините, этот вопрос кажется глупым, но я пытался 1 час искать и ничего не нашел. Итак, я использую liquibase для нескольких баз данных (например, MSSQL, Oracle и MySQL), когда говорю:

addColumn(tableName: "ABC_TEST") {
  column(name: "IS_ACTIVE", type: "boolean")
} 

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


person Faraway    schedule 24.06.2013    source источник
comment
Когда вы говорите несколько баз данных, Grails (2.0 и выше) имеет встроенную возможность для несколько источников данных, вы пробовали это?   -  person dmahapatro    schedule 25.06.2013
comment
@dmahapatro То, что вы упомянули, это конфигурация источника данных, это не проблема. Моя проблема в основном связана со сценариями миграции. И я хочу, чтобы один сценарий миграции работал для нескольких баз данных.   -  person Faraway    schedule 25.06.2013


Ответы (3)


Ознакомьтесь с этим вопросом (и ответами), чтобы увидеть доступные типы, которые предлагает liquibase.

В моем ответе на этот вопрос есть ссылка на соответствующие классы liquibase, которые выполняют перевод в конкретные типы БД.

Когда вы создали таблицу с первичным ключом с «типом liquibase», тогда liquibase переведет это в конкретный тип db. Тогда ваш внешний ключ должен просто использовать тот же тип, и liquibase будет переводить его аналогичным образом.

Например. проверьте класс BigIntType. С liquibase вы просто использовали бы «тип liquibase»: BIGINT. В БД Oracle это будет преобразовано в ("NUMBER", 38,0). В MSSQL это будет преобразовано в ("BIGINT").

person Jens    schedule 25.06.2013

Liquibase имеет концепцию диалектов базы данных, очень похожую на Hibernate. Он использует их, чтобы знать, как генерировать правильные операторы DDL для добавления/изменения/удаления столбцов, внешних ключей и т. д. Когда он подключается к базе данных, он использует метаданные JDBC, чтобы определить, какой тип базы данных вы используете, и использует это для определите правильный диалект.

person Burt Beckwith    schedule 25.06.2013
comment
Спасибо за ответ. Я получил это общее представление. Моя проблема в том, что если теперь я хочу добавить новый столбец, который является внешним ключом, какой тип мне следует использовать? В нашем проекте я видел, как люди использовали «bigint» для mssql или «number» для oracle. Есть ли какой-либо общий тип, скажем, «id», в liquibase, чтобы liquibase преобразовывала его в определенные диалекты для каждой базы данных, и поэтому я просто ставлю тип как «id», и мне не нужно беспокоиться о конкретных типах для каждой базы данных. база данных ? - person Faraway; 25.06.2013

Здесь — это таблица с сопоставлением типов данных Liquibase с SQL Server и Oracle.

||Liquibase data type||SQL Server data type||Oracle data type||
|bigint|bigint|number(38,0)|
|blob|varbinary(max)|blob|
|boolean|bit|number(1)|
|char|char|char|
|clob|nvarchar(max)|clob|
|currency|money|number(15,2)|
|datetime|smalldatetime or datetime2|timestamp|
|date|date or smalldatetime (version <= 2005)|date|
|decimal|decimal|decimal|
|double|float|float(24)|
|float|float|float|
|int|int|number(10)|
|mediumint|mediumint|mediumint|
|nchar|nchar|nchar|
|nvarchar|nvarchar|nvarchar2|
|number|numeric|number|
|smallint|smallint|number(5)|
|time|time or datetime (version <= 2005)|date|
|timestamp|datetime|timestamp|
|tinyint|tinyint|number(3)|
|uuid|uniqueidentifier|raw(16)|
|varchar|varchar|varchar2| 
person user13579    schedule 13.01.2015