Удалить все функции из базы данных Postgres

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


person Jim Mitchener    schedule 14.05.2012    source источник


Ответы (2)


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

SELECT '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;
person ChristopheD    schedule 14.05.2012
comment
Часто применяется ms.nspname = 'public'. - person Drux; 20.08.2016
comment
Вышеупомянутый SQL не будет работать с нестрочными или не буквенно-цифровыми именами функций / схем. Лучше использовать quote_ident или format ('DROP FUNCTION% I.% I (% s);', nspname, proname, oidvectortypes (proargtypes)) для правильного цитирования идентификаторов SQL. - person oᴉɹǝɥɔ; 03.10.2017
comment
Также стоит упомянуть, что это фактически не отбрасывает функции, а просто генерирует команды отбрасывания, которые будут запускаться впоследствии. Немного попался :-) - person mpowered; 22.02.2019

Так же, как был postgis.sql сценарий установки enabler, существует также uninstall_postgis.sql сценарий удаления .

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

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

person Mike T    schedule 14.05.2012