Здравствуйте, форумчане.
Я не являюсь dba, но приходится заниматься и такими делами.
Задача передо мной стоит следующая:
Имеем кучу таблиц( допустим 10000 ), надо удалить некоторое большое кол-во таблиц( допустим 500 таблиц ) по определенному префиксу имени( допустим 'f.%" )
Изначально я увидел несколько вариатов решения задачи:
1) получить список таблиц нужных мне:
select tablename from pg_tables where tablename like 'f.%';
и записать их в файл,
далее shell скриптом читать файл построчно и выполнять команду drop table name,
но сталкнулся с большой проблемой, я не могу как в Mysql или Oracle сделать drop table db.tablename, т.к. pgsql рассматривает это просто как имя таблицы с точкой.
Решил попробовать выполнить psql -c "\c db; drop table tablename", но оказывается что в pgsql нельзя так сделать.
Поэтому данный вариант я отбросил.
2) написать фун-ия в которую(назовем её DropTable) будет передавать имя удаляемой таблицы(в нашем случает 'f.%'), в процедуре будет выполняться запрос
select tablename from pg_tables where tablename like $1;
далее результат(500 имён таблиц) надо записать в массив, после чего надо в цикле с 1ого элемента массива по count пройтись и сделать drop table massiv[id]
Казалось бы всё просто, но я встял на записи имёт в массив, помогите пожалуйста в реализации.
Возможно вы мне сможете подсказать как сделать каким-нибудь другим "постгресовским" путём, заранее благодарен.
echo "DROP TABLE таблица" |
echo "DROP TABLE таблица" | psql -d база_данных