gpt4 book ai didi

postgresql - 光滑 3 : insertOrUpdate not working

转载 作者:行者123 更新时间:2023-11-29 11:15:01 28 4
gpt4 key购买 nike

我在 Postgresql 9.6.1 中使用 slick,Plya! 2.5 和流畅的 2.0.2。

(我也使用 slick-pg 0.14.3,但我认为它在这里没有任何改变。)

我以非常直接的方式使用 insertOrUpdate,但我仍然遇到一个独特的异常。

我有一个使用 insertOrUpdate 的非常简单的测试:如果我多次运行它,我总是会得到一个 sql 异常:

ERROR: duplicate key value violates unique constraint "ga_client_id_pkey"
Detail: Key (client_id)=(1885746393.1464005051) already exists

但是,我的表是用 client_id 作为主键定义的:

def clientId = column[String]("client_id", O.PrimaryKey)

在sql中定义如下:

client_id    TEXT NOT NULL UNIQUE PRIMARY KEY

测试的函数只是做:

db.run(gaClientIds.insertOrUpdate(gaClientId))

Controller 只调用这个方法,什么都不做。

奇怪的是,多次启动方法本身不会导致错误,但 Controller 会导致错误,尽管它只调用方法。

insertOrUpdate 灵活的功能还不确定还是我遗漏了什么?

最佳答案

insertOrUpdate 仅在 MySQL 驱动中支持

http://slick.lightbend.com/doc/3.2.1/supported-databases.html

您可以试试这个库,它为您提供了 insertOrUpdate/upsert 的实现

https://github.com/tminglei/slick-pg

这就是我们在当前项目中使用它的方式。

import com.github.tminglei.slickpg._
import com.typesafe.config.ConfigFactory
import slick.basic.Capability

object DBComponent {

private val config = ConfigFactory.load()

val driver = config.getString("rdbms.properties.driver") match {
case "org.h2.Driver" => slick.jdbc.H2Profile
case _ => MyPostgresProfile
}

import driver.api._

val db: Database = Database.forConfig("rdbms.properties")

}

trait MyPostgresProfile extends ExPostgresProfile {

// Add back `capabilities.insertOrUpdate` to enable native `upsert` support; for postgres 9.5+
override protected def computeCapabilities: Set[Capability] =
super.computeCapabilities + slick.jdbc.JdbcCapabilities.insertOrUpdate

override val api: MyAPI.type = MyAPI

object MyAPI extends API
}

object MyPostgresProfile extends MyPostgresProfile

关于postgresql - 光滑 3 : insertOrUpdate not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42277146/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com