В логах PostgreSQL: ALTER TABLE "tbl_user" DISABLE TRIGGER ALL permission denied: "RI_ConstraintTrigger_16572".
Получается, что Fixture Manager перед заполнением данных отключает ограничения, триггеры. Какие могут быть решения ?
- Дать права superuser пользователю.
Крайне глупое решение согласны ? В приложениях, как правило, используется пользователь с ограниченными правами для работы с базой данных и тестирование операций с БД необходимо проводить именно этими ограниченными пользователями. - Использовать несколько соединений с базой данных.
На этапе подготовки БД соединяться как superuser (отключение ограничений, очистка таблиц, подготовка и заливка данных). А уже при запуске тестов - осуществлять соединение обычным пользователем (или делать переключение ролей).
Они используют в PostgreSQL особенность, что в рамках транзакции можно отключить проверку ограничений для каждой операции непосредственно, а осуществлять проверки уже только при подтверждении транзакции. Но это уже трюки, кроме того, этот фокус может не пройти с другими базами!
Я пока что вижу такое решение. В конфиге прописываем параметр для соединения с базой данных как суперюзер, наследуем класс для работы с фикстурами и переписываем методы, которые осуществляют очистку и загрузку базы, чтобы использовали другой коннект (суперюзера).
Ваши мысли на эту тему ?