У меня большая база данных, которая состоит из 100+ таблиц. Некоторые из этих таблиц настолько велики, что запуск VACUUM на них занимает пару часов, поэтому я не хочу запускать его на этих таблицах. Есть ли способ запустить VACUUM с динамическим списком таблиц, например, как показано ниже?
VACUUM (SELECT table_name FROM information_schema.tables WHERE table_name not in ['list', 'of', 'big', 'tables'])
Конечно, можно было бы просто перечислить все имена таблиц вручную, но в идеале я хотел бы иметь способ делать это динамически.
... таблицы настолько велики, что запуск VACUUM на них занимает пару часов, поэтому я не хочу запускать его на этих таблицах.
На самом деле это может быть контрпродуктивный.
Вы говорите, что ВАКУУМ требует часов, но на самом деле делать что-нибудь? Является ли удалять какие-нибудь кортежи из таблицы?
Если в эту таблицу внесено много транзакционных обновлений, то "мертвые" строки иметь быть очищенным через некоторое время (ВАКУУМОМ). Если вы этого не сделаете, производительность вашего приложения начнет стремительно падать, поскольку PostgreSQL будет вынужден перемещаться по постоянно увеличивающимся количествам мертвых строк.
Какая версия PostgreSQL у вас установлена? Вы можете обнаружить, что он автоматически выполняет ВАКУУМ.
если ты по-прежнему хотите сделать это, затем напишите запрос, чтобы «выбрать» операторы VACUUM, поместить их в файл и запустить файл как SQL:
select 'vacuum ' || table_name || ';' ddl
from information_schema.tables
where ...