2016-08-05 11 views
1

Ich möchte sqitch deploy Skript schreiben, um neue Version des Auslösers zu erstellen. Um sicherzustellen, dass das Skript zur Wiederherstellung die vorherige Version wiederherstellt, möchte ich eine Sicherungskopie dieser Funktion erstellen. Gibt es eine Möglichkeit zu kopieren (RENAME TO funktioniert nicht!) Trigger-Funktion mit neuem Namen?Wie kopiere Funktion in PostgreSQL

+0

[ pg-proc] (https://www.postgresql.org/docs/current/static/catalog-pg-proc.html)? Sie sind interessant in "proname" und "prosrc" Spalten, denke ich. – Abelisto

Antwort

0

RENAME TO sollte funktionieren. Verpassen Sie Klammern oder schließen Sie sie auf der anderen Seite ein?

Klammerung mit alten table Umbenennungs sind ein wenig kompliziert:

postgres=# create function test() returns bool language sql as $$ select true; $$; 
CREATE FUNCTION 
postgres=# alter function test() rename to old_test(); 
ERROR: syntax error at or near "(" 
LINE 1: alter function test() rename to old_test(); 
               ^
postgres=# alter function test() rename to old_test; 
ALTER FUNCTION 

Wenn das nicht genug ist, dann könnte man DO und EXECUTE die Ausgabe von pg_get_functiondef nach dem Parsen und Umbenennung:

select * from pg_get_functiondef('old_test'::regproc); 
+1

RENAME TO ändert alle Verweise auf die umbenannte Triggerfunktion in CREATE TRIGGER-Anweisungen, sodass ich sie nicht zum Erstellen von Sicherungen verwenden kann. – Jarek