Вопрос по postgresql – Удалить все функции из базы данных Postgres

21

У меня есть база данных со старой сломанной версией PostGIS. Я хотел бы легко удалить все функции из базы данных (все они из PostGIS). Есть ли простой способ сделать это? Даже простое извлечение списка имен функций было бы приемлемым, так как я мог просто сделать большойDROP FUNCTION заявление.

Ваш Ответ

2   ответа
3

postgis.sql enabler install scriptесть такжеuninstall_postgis.sql Удалить скрипт.

psql -d [yourdatabase] -f /path/to/uninstall_postgis.sql

Предупреждение: будьте готовы к тому, что ваши столбцы геометрии / географии и данные исчезнут!

31

Прекрасный ответ на этот вопрос можно найти здесь:

DROP FUNCTION ' || ns.nspname || '.' || proname 
       || '(' || oidvectortypes(proargtypes) || ');'
FROM pg_proc INNER JOIN pg_namespace ns ON (pg_proc.pronamespace = ns.oid)
WHERE ns.nspname = 'my_messed_up_schema'  order by proname;
Также стоит упомянуть, что это на самом деле не удаляет функции, а только генерирует команды удаления для последующего запуска. Немного гоча :-)
Вышеуказанный SQL не будет работать с не строчными или буквенно-цифровыми именами функций / схем. Лучше использовать quote_ident или формат («DROP FUNCTION% I.% I (% s);», nspname, proname, oidvectortypes (proargtypes)), чтобы правильно указывать идентификаторы SQL.
Oftentimes,ms.nspname = 'public' применяется.

Похожие вопросы