Скверил: вставить, если не существует?

Как я могу вставить, если запись еще не существует с помощью Squeryl?

Я пытался поймать исключение PSQLException, если оператор вставки выполняется для уже существующего кортежа, но он не работает (исключение PSQLException не отслеживается). На самом деле было бы лучше сказать Squeryl не вставлять уже существующие кортежи. Это то, что я ищу.

2 ответа

К сожалению, если вы используете Postgres, если возникнет исключение, вы не сможете продолжить обработку. Это довольно хорошее обсуждение здесь: https://groups.google.com/forum/?fromgroups=

Чтобы сделать то, что вы ищете, вы, вероятно, захотите сначала выбрать опцию, чтобы найти ids которые уже существуют и удалите их из элементов, которые вы хотите вставить.

Вы вообще не хотите, чтобы одни и те же кортежи существовали в БД, или только этот скверил их не вставит?

В первом случае просто добавьте к этому кортежу уникальное ограничение. Пример:

on(myTable)(e => declare(
    columns(e.name, e.year) are (indexed("myIndex"), unique)
))

Этот код должен находиться рядом с определениями таблиц, такими как val myTable = table[MyTable], Я также добавил индекс для этого кортежа, вы можете удалить этот код, если хотите.

Другие вопросы по тегам