Grails и GORM: как указать эквивалент CREATE INDEX в доменном классе?

Могу я разделить свое разочарование. GORM (и Grails ..), похоже, имеет ОЧЕНЬ ограниченную документацию по индексам базы данных. Я нигде не нашел помощи в том, как создать индекс для класса предметной области, если я хочу, чтобы индекс был чем-то большим, чем то, что было здесь задокументировано: http://grails.org/doc/latest/guide/GORM.html.

Вот в SQL то, чего я хотел бы достичь с помощью Grails:

CREATE INDEX very_fast_index 
ON slow_table(date DESC NULLS LAST) 
WHERE is_latest = true;

Похоже, я мог бы сказать GORM создать индекс для столбца даты. Но похоже, что есть НУЛЬ вариантов для добавления других критериев.

Как я ненавижу, когда простые вещи становятся чрезвычайно сложными, я создал эти индексы вручную в PostgreSQL CLI. Не от Grails, который был бы более портативным. Я не хочу писать HQL, потому что мне тоже не нравится эта идея.

Любые идеи? У меня нет ничего, кроме ручного.


person tukkajukka    schedule 13.12.2012    source источник


Ответы (1)


HQL - это язык обработки данных, а не Язык определения данных, поэтому он не подходит для ваших нужд. Если вы хотите использовать специфические функции поставщика базы данных, вам необходимо обойти спящий режим и использовать соединение jdbc нижнего уровня для выполнения SQL-запросов. В grails вы можете использовать bean-компонент dataSource, чтобы сделать запрос отличным способом. Конечно, это связывает вас с конкретной базой данных (в вашем случае Postgres).

person Fabiano Taioli    schedule 13.12.2012
comment
Ссылка GORM, которую вы указали, была включена в мой вопрос и, как я уже сказал, не дает никакой помощи. Как бы вы использовали возможности индекса HQL в доменном классе Grails? - person tukkajukka; 13.12.2012
comment
создание индекса не достигается HQL. HQL предназначен для выбора, обновления или удаления строк в базе данных, а не для создания строк. Клаусула where в индексе создания не поддерживается ни всеми базами данных, ни спящим режимом. Вы должны выполнить запрос sql строки с использованием объекта подключения jdbc dataSource, если вы хотите выполнить его в grails. - person Fabiano Taioli; 13.12.2012
comment
исправить мой комментарий ... HQL предназначен для выбора обновления или удаления строк в БД, а не для изменения схемы БД ... - person Fabiano Taioli; 14.12.2012
comment
Хорошая точка зрения. Не могли бы вы отредактировать свой ответ так, чтобы он охватывал упомянутые вами вещи, чтобы я мог отметить его как ответ? Те вещи, о которых вы упомянули, сузят выбор до пользовательских сценариев SQL (возможно, на чистом Java и SQL), а также привяжут приложение к определенной СУБД. - person tukkajukka; 17.12.2012