Вы не можете создать единый текстовый индекс, который пересекает несколько объектов. Каждый индекс является индексом только для одного столбца таблицы.
Возможно, вы можете сгенерировать созданные вами объекты, выбрав столбцы в таблице столбцов (хотя было бы необычно делать их честно). Это предполагает, что каждая таблица имеет PK с именем id
. Я просто пытаюсь упростить.
select 'create text index ' || table_schema || '.t_' || table_name || '_' || column_name
|| '_index on ' || table_schema || '.' || table_name
|| '(id,' || column_name || ');'
from columns
where data_type ilike '%char';
Тогда вы можете создать представление, которое выбирает из всех текстовых индексов. Тем не менее, я не знаю, насколько это будет хорошо. Казалось бы, оптимизатор будет делать то, что ему нужно, но сказать сложно. Это может быть сгенерировано аналогично указанному выше запросу и будет выглядеть так, когда это будет сделано (обратите внимание, что если вы являетесь разделом, вам нужно добавить столбец для этого).
create view v_all_text_indexes
as
select 'schema1' schema_name, 'table1' table_name, 'column1' column_name, word, doc_id
from schema1.t_table1_column1_index
union all
select 'schema1' schema_name, 'table1' table_name, 'column2' column_name, word, doc_id
from schema1.t_table1_column2_index
.
.
.
select 'schema1' schema_name, 'tablen' table_name, 'columnn' column_name, word, doc_id
from schema1.t_tablen_columnn_index
Я понятия не имею, как хорошо это будет выполнять для вас. YMMV.
Дайте мне знать, если я неправильно понял вопрос. – woot
Вы хорошо поняли мою проблему. Благодарю. Фактически, я придумал аналогичное решение. Я дам вам знать, есть ли проблема с производительностью. –
Просто обязательно сделайте 'union all', а не' union'. Вы, наверное, знали это, но просто подумали, что я назову это на всякий случай. – woot