Je me lève avec Slick 3 dans une application Scalatra, avec PostgreSQL. Je suis capable de lire à partir d'une table créée manuellement très bien, mais j'ai du mal à en créer un via Slick. Quand j'imprimera le SQL généré, je vois ceci:Comment puis-je obtenir Slick 3 pour produire BIGSERIAL au lieu de GENERATED BY DEFAULT AS IDENTITY?
CREATE TABLE "my_table"
(
"id" INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL PRIMARY KEY,
"text" VARCHAR(4096) NOT NULL
);
qui ne fonctionne pas, même entré manuellement dans psql, générant une erreur:
ERROR: syntax error at or near "GENERATED"
En fin de compte ce que je pense que je dois :
CREATE TABLE "my_table"
(
"id" BIGSERIAL PRIMARY KEY,
"text" VARCHAR(4096) NOT NULL
);
Dans mon build.scala, j'ai ces dépendances:
"com.typesafe.slick" %% "slick" % "3.0.2",
"org.postgresql" % "postgresql" % "9.4-1201-jdbc41",
"com.zaxxer" % "HikariCP" % "2.4.5",
application.conf a ceci:
postgres {
driver = "slick.driver.PostgresDriver$"
db {
url = "jdbc:postgresql://db/mydb"
driver = org.postgresql.Driver
connectionPool = HikariCP
user = postgres
password = ""
}
}
Mon code de démarrage a ceci:
import slick.backend.{DatabaseConfig, StaticDatabaseConfig}
import slick.driver.JdbcProfile
@StaticDatabaseConfig("file:src/main/resources/application.conf#postgres")
class ScalatraBootstrap extends LifeCycle {
val logger = LoggerFactory.getLogger(getClass)
override def init(context: ServletContext) {
val dbConfig = DatabaseConfig.forConfig[JdbcProfile]("postgres")
MyDAO.db = dbConfig.db
context.mount(new MyController, "/*")
}
...
}
MyDAO a:
var db: Database = null
class MyTable(tag: Tag) extends Table[(Int, String)](tag, "my_table") {
def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
def text = column[String]("text", O.SqlType("varchar(4096)"))
def * = (id, text)
}
val myTable = TableQuery[MyTable]
val createTable = myTable.schema.create
def createAllTables() = {
createTable.statements.foreach(println)
db.run(createTable)
}
Et le contrôleur appelle avec succès cette fonction de createAllTables, sans les erreurs. Je n'ai pas confirmé l'erreur via les journaux PostgreSQL directement parce que j'ai quelques difficultés à configurer le conteneur Docker dans lequel il s'exécute, mais j'ai confirmé la possibilité d'interroger.
Que dois-je modifier?