Отбросить все функции из базы данных Postgres

18

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

    
задан Jim Mitchener 14.05.2012 в 23:10
источник

2 ответа

27

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

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;
    
ответ дан ChristopheD 14.05.2012 в 23:14
  • Зачастую применяется ms.nspname = 'public'. –  Drux 20.08.2016 в 06:06
  • Вышеупомянутый SQL завершится неудачей по не менее строчным или не алфавитно-цифровым именам функций / схем. Лучше использовать quote_ident или format ('DROP FUNCTION% I.% I (% s);', nspname, пронайт, oidvectortypes (proargtypes)), чтобы правильно ввести SQL-идентификаторы. –  oᴉɹǝɥɔ 03.10.2017 в 18:10
3

Так же, как был скрипт установки postgis.sql enabler , есть также uninstall_postgis.sql удалить скрипт.

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

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

    
ответ дан Mike T 15.05.2012 в 01:01