2017-02-16 19 views
6

Я использую пятно с Postgresql 9.6.1, Plya! 2.5 и play-slick 2.0.2.Слайк 3: insertOrUpdate не работает

(я также использую пятно-страничный 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)) 

и контроллер просто не называет это методы и делает ничего.

Странная вещь заключается в том, что запуск самих методов несколько раз не приводит к ошибке, но контроллер делает, хотя он вызывает только метод.

Есть insertOrUpdate Функция скольжения не уверен, или я что-то не хватает?

+0

Та же проблема на моей стороне с slick3. 2.1. @Simon вы нашли решение? – Stoecki

+0

Нет, к сожалению, единственным решением, которое я нашел, является запись вызова базы данных в простой sql ... – Simon

+0

Это тоже мое решение – Stoecki

ответ

2

insertOrUpdate поддерживается только в драйвере MySQL

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

Вы можете попробовать эту библиотеку, которая дает вам реализацию insertOrUpdate/upsert

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

+1

IMO, doc позволяет думать, что он поддерживается для каждого драйвера, и я никогда не видел эту страницу раньше , Спасибо за ваш ответ. – Simon