PSQLException中的多键索引线索与Slick,Postgres在一个lagom项目上



我有一个 lagom 应用程序,并使用 lagom jdbc 作为读取侧。 表已创建并工作正常。重新启动并已创建的具有多键索引的表后,我总是收到错误:

org.postgresql.util.PSQLException: ERROR: relation "article_number_fulfiller_idx" already exists

我的表如下所示:

class ArticleTable(tag: Tag) extends Table[ArticleTableData](tag,ArticleTable.TableName) {
def entityId = column[UUID](ArticleTable.ColEntityId,O.PrimaryKey)
def articleBaseNumber = column[String](ArticleTable.ColArticleBaseNumber)
def articleSpecificationNumber = column[Option[String]](ArticleTable.ColArticleSpecificationNumber)
def fulfillerVendorNumber = column[String](ArticleTable.ColFulfillerVendorNumber)
def fulfillerName = column[String](ArticleTable.ColFulfillerName)
def availability = column[String](ArticleTable.ColAvailability)
def completeArticleNumber = column[String]("complete_article_number")
def idxKey = index("article_number_fulfiller_idx",(completeArticleNumber,fulfillerVendorNumber),unique = true)
def * = (entityId,articleBaseNumber,articleSpecificationNumber,fulfillerVendorNumber,fulfillerName,availability,completeArticleNumber) <> ( (ArticleTableData.apply _).tupled, ArticleTableData.unapply )
}

我的构建处理程序在这里:

override def buildHandler(): ReadSideProcessor.ReadSideHandler[Article.Event] = readSide
.builder[Article.Event](ArticleTable.TableName+"_offset")
.setGlobalPrepare(table.schema.createIfNotExists)
.setEventHandler[ArticleCreated](insert)
.setEventHandler[DescriptionAdded](_ => DBIOAction.successful(Done) )
.setEventHandler[DescriptionRemoved](_ => DBIOAction.successful(Done) )
.build()

我更新了我的 sbt 以使用最新的: 取而代之的是这个

lagomScaladslPersistenceJdbc

我现在用这个

"com.lightbend.lagom" %% "lagom-scaladsl-persistence-jdbc" % "1.6.2",
"com.typesafe.slick" %% "slick" % "3.3.2"

例外只是我得到的例外之一。我为每个多键索引都有一个例外:(

Lagom 每次重新启动都会尝试创建新的表和索引。为避免出现这些错误,请不要强制创建索引和表,如果不存在,请使用 create。如果 slick 不允许这样做,请查看本机查询。

你对这个光滑的问题是正确的。

该页介绍了它对开发和测试环境非常有用。

在这种情况下,您可以尝试:

  • @vladislav-基辅建议的"如果不存在则创建"查询,
  • 某些数据库不支持此类查询 (SQL Server(,您可以使用适当的错误代码捕获异常

我不建议使用 globalPrepare(( 来创建表和索引。这种方法的主要困难是表格更改。在这种情况下,您需要考虑对数据库脚本进行版本控制(如果索引删除/添加或删除列,您将怎么做?

相关内容

  • 没有找到相关文章

最新更新