2017-12-13 5 views
0

hsqldb에서 함수 색인을 사용하는 방법이 있습니까? 내가 HSQLDB 얻은 것으로 나타났습니다 문서에서hsqldb/liquibase에서 함수로 고유 색인을 생성하십시오.

<changeSet author="dgt" id="unique-postgres" dbms="hsqldb"> 
    <createIndex indexName="lower_case_index" tableName="users" unique="true"> 
     <column name="LOWER(name)" computed="true"/> 
    </createIndex> 

: 내 createIndex의 변경 집합 내부

<column name="LOWER(name)"/> 
<column name="LCASE(name)"/> 
<column name="LOWER(name)" computed="true"/> 
<column name="LCASE(name)" computed="true"/> 

:

나는 그 4를 시도 LOWER과 기능 내장 LCASE, 그러나 그 어떤 작동하지 않습니다 나를 위해.

I에 오류가있어 매 시간 :

Reason: liquibase.exception.DatabaseException: unexpected token: ( required:) [Failed SQL: CREATE UNIQUE INDEX PUBLIC.lower_case_index ON PUBLIC.users(LOWER(name))]

내가 VARCHAR_IGNORECASE에 VARCHAR에서 열 유형을 변경할 수있는 솔루션에 대해 알고,하지만 난 솔루션을 필요로하기 때문에 그것이 나를 위해 그렇지 않다 db : hsqldb와 postgres 모두에서 작업 할 수 있습니다.

<changeSet author="dgt" id="users-unique-index-postgres" dbms="hsqldb"> 
    <createIndex indexName="name_index" tableName="users" unique="true"> 
     <column name="LOWER(name)" computed="true"/> 
    </createIndex> 
</changeSet> 
<changeSet author="dgt" id="users-unique-index-hsqldb" dbms="postgresql"> 
    <createIndex indexName="name_index" tableName="users" unique="true"> 
     <column name="lower(name)" computed="true"/> 
    </createIndex> 
</changeSet> 

을하지만 그것은 작동하지 않습니다

나의 이상적인 솔루션은 다음과 같이한다.

답변

1

HSQLDB는 함수 기반 인덱스를 전혀 지원하지 않으므로 다른 솔루션을 찾아야합니다. 예 : varchar 대신 varchar_ignorecase으로 열을 정의한 다음 해당 열에 "일반"고유 인덱스를 만듭니다.

속성을 사용하여 단일 테이블 정의를 유지할 수 있습니다.

다음과 같이 할 수

:

<changeSet author="dgt" id="create-users-table"> 
    <property name="users_name_type" value="varchar" dbms="postgresql"/> 
    <property name="users_name_type" value="varchar_ignorecase" dbms="hsqldb"/> 

    <createTable tableName="users"> 
    <column name="name" type="${users_name_type}"> 
     <constraints nullable="false"/> 
    </column> 
    </createTable> 
</changeSet> 


<changeSet author="dgt" id="users-unique-index-postgres" dbms="postgresql"> 
    <createIndex indexName="name_index" tableName="users" unique="true"> 
    <column name="lower(name)" computed="true"/> 
    </createIndex> 
</changeSet> 

<changeSet author="dgt" id="users-unique-index-hsqldb" dbms="hsqldb"> 
    <createIndex indexName="name_index" tableName="users" unique="true"> 
    <column name="name"/> 
    </createIndex> 
</changeSet> 
+0

확인이 하나 https://liquibase.jira.com/browse/CORE-2179 다른 하나 https://liquibase.jira.com/browse/CORE-2107. 함수 기반 인덱스를 만들 수있는 지원이 없다고 확신합니까? – degath

+0

@degath : 아, 감사합니다. 나는 그 사실을 몰랐습니다. 하지만 그것은 HSQLDB에 대한 접근 방식을 변경하지 않습니다 –

+0

그래서 내가 할 수있는 것처럼 postgres에 대한 나의 예를 좋아하지만 hsqldb에 대한 varchar ignorecase와 함께 할 필요가 아직도? – degath

관련 문제