2012-05-14 2 views
18

Ich habe eine Datenbank mit einer alten kaputten Version von PostGIS installiert. Ich möchte alle Funktionen in der Datenbank (sie sind alle von PostGIS) leicht fallen lassen. Gibt es einen einfachen Weg, dies zu tun? Selbst das einfache Extrahieren einer Liste von Funktionsnamen wäre akzeptabel, da ich einfach eine große DROP FUNCTION Aussage machen könnte.Alle Funktionen aus der Postgres-Datenbank löschen

Antwort

25

A fine answer to this question can be found here:

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; 
+1

Oft gilt 'ms.nspname = 'public'. – Drux

+0

Das obige SQL schlägt bei nicht-kleingeschriebenen oder nicht alphanumerischen Funktions-/Schemanamen fehl. Verwenden Sie besser quote_ident oder format ('DROP FUNKTION% I.% I (% s);', nspname, proname, oidvectortypes (proargtypes)), um SQL-Bezeichner korrekt zu zitieren. –

3

So wie es ein postgis.sql enabler install script war, gab es auch ein uninstall_postgis.sql Deinstallationsskript.

Warnung: Seien Sie darauf vorbereitet, dass Ihre Spalten und Daten für Geometrien/Geografie verschwinden!