/ / Unbekannter Datentyp „JSONB“ beim Ausführen von Tests in Play Slick mit H2 Database - Postgresql, Scala, Playframework, H2, Slick

Unbekannter Datentyp "JSONB" bei Tests im Slick mit H2 Database - postgresql, scala, playframework, h2, slick

Ich habe ein Entwicklungsproblem Unbekannter Datentyp: "JSONB" beim Ausführen von Tests in playframework mit

  • playframework v2.6.6 für scala
  • Play-Slick v3.0.2
  • play-slick-evolutions v3.0.2
  • postgresql - 42.0.0
  • h2database - 1.4.194

Mein H2DbConnector sieht so aus:

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"))
}
}

In 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"

Ich habe eine problematische Zeile in evolutions 2.sql Datei

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

Wenn ich dao teste, bekomme ich Fehler wie

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]   ...

Könnten Sie mir bitte helfen, dieses Problem zu beheben?

Antworten:

2 für die Antwort № 1

H2 unterstützt nicht JSONB Spaltentyp.

Alle unterstützten Spaltentypen Unterstützte Datentypen von H2

Versuchen Sie, Postgres auch in Tests zu verwenden oder Standard-SQL-Statements zu schreiben, die beide Datenbanken verstehen.