2017-12-21 42 views
1

나는 진화 문제를 알 수없는 데이터 형식이 "JSONB"을 스칼라에 대한알 수없는 데이터 유형 "JSONB"H2 데이터베이스와 플레이 매끄러운에서 테스트를 실행할 때

  • playframework의 v2.6.6을 사용하여 playframework에서 테스트를 실행할 때
  • 플레이 매끄러운 v3.0.2
  • 플레이 매끄러운 진화 v3.0.2
  • PostgreSQL을 - 42.0.0
  • h2database - 1.4.194

내 H2DbConnector은 다음과 같습니다 application.test.conf

slick.dbs.default.driver = "slick.driver.H2Driver$" 
slick.dbs.default.db.driver = "org.h2.Driver" 
slick.dbs.default.db.url = "jdbc:h2:mem:play;MODE=PostgreSQL;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=FALSE" 

에서

import entities.StubData._ 
import org.scalatest.{BeforeAndAfterAll, FunSuite} 
import play.api.db.DBApi 
import play.api.db.evolutions.Evolutions 
import play.api.inject.guice.GuiceApplicationBuilder 

trait H2DbConnector extends FunSuite with BeforeAndAfterAll { 
    val appBuilder = new GuiceApplicationBuilder() 
    .configure(configuration) 

    val injector = appBuilder.injector 
    lazy val databaseApi = injector.instanceOf[DBApi] 

    override def beforeAll() = { 
    Evolutions.applyEvolutions(databaseApi.database("default")) 
    } 

    override def afterAll() = { 
    Evolutions.cleanupEvolutions(databaseApi.database("default")) 
    } 
} 

내가 진화 한 문제 라인이 파일 2.sql있어

ALTER TABLE "Messages" ADD COLUMN "metaJson" JSONB NULL; 

dao 테스트를 실행할 때

과 같은 오류가 발생합니다.
2017-12-21 16:08:40,409 [error] p.a.d.e.DefaultEvolutionsApi - Unknown data type: "JSONB"; SQL statement: 
ALTER TABLE "Messages" ADD COLUMN "metaJson" JSONB NULL [50004-194] [ERROR:50004, SQLSTATE:HY004] 
[info] OptoutsDaoTest *** ABORTED *** 
[info] play.api.db.evolutions.InconsistentDatabase: Database 'default' is in an inconsistent state![An evolution has not been applied properly. Please check the problem and resolve it manually before marking it as resolved.] 
[info] at play.api.db.evolutions.DatabaseEvolutions.$anonfun$checkEvolutionsState$3(EvolutionsApi.scala:285) 
[info] at play.api.db.evolutions.DatabaseEvolutions.$anonfun$checkEvolutionsState$3$adapted(EvolutionsApi.scala:270) 
[info] at play.api.db.evolutions.DatabaseEvolutions.executeQuery(EvolutionsApi.scala:317) 
[info] at play.api.db.evolutions.DatabaseEvolutions.checkEvolutionsState(EvolutionsApi.scala:270) 
[info] at play.api.db.evolutions.DatabaseEvolutions.evolve(EvolutionsApi.scala:239) 
[info] at play.api.db.evolutions.Evolutions$.applyEvolutions(Evolutions.scala:193) 
[info] at H2DbConnector.beforeAll(H2DbConnector.scala:15) 
[info] at H2DbConnector.beforeAll$(H2DbConnector.scala:14) 
[info] at OptoutsDaoTest.beforeAll(OptoutsDaoTest.scala:5) 
[info] at org.scalatest.BeforeAndAfterAll.liftedTree1$1(BeforeAndAfterAll.scala:212) 
[info] ... 

이 문제를 해결해 주시겠습니까?

+0

런타임시 대상 DB가 무엇이든간에 [Acolyte] (http://acolyte.eu.org/)에서 JDBC 연결을 "모의"할 수 있습니다. – cchantep

답변

1

H2는 JSONB 열 유형을 지원하지 않습니다.

지원되는 모든 열 유형 Supported datatypes of H2

봅니다 테스트에서 또한 포스트 그레스를 사용하거나 두 데이터베이스 이해 표준 SQL 문에서도를 작성합니다.

+0

데이터 유형을 지원하는 다른 해결 방법이 있습니까 ** Postgres 및 H2 데이터베이스의 JSON ** – Azik

+0

포스트그레스에 대한 테스트 계정을 만들고 테스트에서 포스트그레스를 사용하십시오. – pamu

+0

도움을 주셔서 대단히 감사합니다! – Azik