Использование таблицы SQL без столбца идентификатора в Haskell/Persistent

Я хочу использовать существующую базу данных с Persistent, используя эту упрощенную схему:

share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
Entity sql=entities
  deriving Show

EntityLink sql=entity_links
  sourceId EntityId
  targetId EntityId
  deriving Show
|]

entities стол имеет id колонка, которая просто отлично. Тем не менее entity_links Таблица не имеет, и я не хочу добавлять один. Вместо этого он имеет первичный ключ (source_id, target_id), Всякий раз, когда я хочу вставить EntityLinkЯ получаю эту ошибку во время выполнения:

SqlError {sqlState = "42703", sqlExecStatus = FatalError, sqlErrorMsg = "column \"id\" does not exist", sqlErrorDetail = "", sqlErrorHint = ""}

Вот как я вставляю EntityLink в коде, указан действительный sourceId а также targetId:

      insert $ EntityLink { entityLinkSourceId = sourceId
                          , entityLinkTargetId = targetId
                          }

Как я могу отключить id столбец в постоянном для типа EntityLink?

1 ответ

Решение

Ты можешь использовать Primary и укажите столбцы, которые принадлежат первичному ключу. Подобно:

EntityLink sql=entity_links
  sourceId EntityId
  targetId EntityId
  Primary sourceId targetId
  deriving Show
Другие вопросы по тегам