У меня есть таблица в базе данных SQLite, созданная с помощью кода ниже. Обратите внимание на соединение первичного ключа:SQLite требует дублировать строки на вставке, тогда как ни один не может быть найден
db.create_table(:person_hash) do
Integer :person_id
Bignum :hash // MD5 hash in hex stored as numeric: hash.to_i(16)
primary_key [:person_id, :hash]
end
Эта таблица содержит несколько строк уже:
puts db[:person_hash].where(:person_id => 285577).all
# {:person_id=>285577, :hash=>306607097659338192312932577746542919680}
Теперь, когда я пытаюсь вставить это:
db[:person_hash].insert({:person_id=>285577, :hash=>306607097659338206333361532286405644297})
я получаю это:
SQLite3::ConstraintException: columns person_id, hash are not unique (Sequel::DatabaseError)
Если строка еще не существует в таблице, как она может быть дубликатом?
Я попытался вставить другой хэш для одного и того же идентификатора человека, и он работал без проблем.
Переданные данные в новую таблицу с суррогатным ПК вместо. Знал, что я могу рассчитывать на тебя. Благодаря! Интересно, что такая ошибка отключает всю функцию составных клавиш, по крайней мере, в ситуации, рассматриваемой здесь, где ПК являются единственными столбцами в таблице. – Seralize