2014-12-01 3 views
2

У меня есть определение сущности, который работает на Дев и производства envs (MySQL), но не на тест (SQLite):Дубликат индекс SQLite, а не на MySQL

/** 
* Invoice 
* 
* @ORM\Table(name="invoice", indexes={ 
*  @ORM\Index(name="ref_idx", columns={"ref"}), 
*  @ORM\Index(name="created_at_idx", columns={"created_at"}), 
*  @ORM\Index(name="paid_idx", columns={"paid"}), 
*  @ORM\Index(name="is_valid_idx", columns={"is_valid"}), 
*  @ORM\Index(name="canceled_idx", columns={"canceled"}) 
* }) 
* @ORM\Entity(repositoryClass="AppBundle\Repository\InvoiceRepository") 
*/ 
class Invoice 
// [...] 

Когда я запускаю доктрину: Схема: создать или доктрина: схема: обновление --force на тест окр, я следующее сообщение об ошибке:

[Doctrine\DBAL\DBALException]                 
    An exception occurred while executing 'CREATE INDEX created_at_idx ON invoice (created_at)': 
    SQLSTATE[HY000]: General error: 1 index created_at_idx already exists       


    [PDOException]               
    SQLSTATE[HY000]: General error: 1 index created_at_idx already exists 

ли кто-то уже был такой вопрос? Как решить/игнорировать его?

Спасибо.

+0

Просто мысли. но одна разница между двумя СУБД заключается в том, что SQLITE - это весь текст, все столбцы содержат в основном строковые данные. Возможно, что у вас есть некоторые значения, которые являются «разными» в тексте, но не в другом формате. Не могу представить, действительно ли отличный пример, но, как «123» и «0123», отличается от текста, но не в столбце INT. – asantaballa

+0

Обязательно я понимаю. Вы имеете в виду, если у меня есть другой 'created_at_ids' где-то в другом объекте, sqlite может выйти из строя? – Soullivaneuh

+0

Извините! Я ответил на строки с ошибками и только что понял из вашего комментария, что проблема была сама по себе. Так что да, я считаю, что если в базе данных уже есть объект, называемый created_at_idx, независимо от ассоциации с этой таблицей, он потерпит неудачу. НО это будет справедливо для большинства СУБД, поэтому до сих пор не знаю, какова будет ваша разница в поведении между двумя СУБД, кроме как просто бродячего имени. Посмотрите, существует ли один (я думаю, это «SELECT * FROM my_db_name.sqlite_master, где name =« created_at_ids »). Извините, я не могу помочь. – asantaballa

ответ

11

Решение здесь: https://stackoverflow.com/a/24634713/1731473

В двух словах, ваш индекс должен иметь уникальное имя по базе данных.

Таким образом, вы не можете иметь:

счет-фактура -> created_at_idx пользователя -> created_at_idx

Но:

invoive -> invoice_created_at_idx пользователя -> user_created_at_idx

Смежные вопросы