Автоматизация – это волшебство. Каждому программисту это нужно, чтобы жить лучшей жизнью.

Вариант использования 1:

Я пользователь PostgreSQL. Если я хочу создать индекс для всех столбцов, имя которых заканчивается на Product_number, могу ли я использовать для этого один оператор SQL?

Да, вот оно.

SELECT format(
'create index index_prefix_%I CONCURRENTLY on table_name(%I)', attname, attname
)
FROM pg_attribute
WHERE attrelid = 'table_name'::regclass
AND attname like '%product_number'
ORDER BY attnum
\gexec

Оператор select предназначен для создания операторов SQL для создания индекса для каждого столбца, имя которого заканчивается на product_number. Его выходные данные отправляются на сервер в виде операторов SQL, которые выполняются командой psql gexec.

Это действительно одно из высокоэффективных применений.

Конечно, аналогичным образом мы можем изменить весь созданный ИНДЕКС на другое имя. Например,

SELECT format(
'ALTER INDEX index_prefix_%I RENAME TO index_prefix_%I_old', attname, attname
)
FROM pg_attribute
WHERE attrelid = 'table_name'::regclass
AND attname like '%product_number'
\gexec

Он переименовывает все индексы, добавляя _old.

Рекомендации