2016-08-05 75 views
1

我想編寫sqitch部署腳本來創建新版本的觸發器。爲了確保恢復腳本將功能恢復到以前的版本,我想對此功能進行備份。有什麼方法可以複製(RENAME TO不工作!)用新名稱觸發功能?如何在PostgreSQL中複製功能

+0

[ PG-PROC(https://www.postgresql.org/docs/current/static/catalog-pg-proc.html)?我猜你在'proname'和'prosrc'列中很有趣。 – Abelisto

回答

0

RENAME TO應該工作。你忘記了括號還是將它們包含在另一邊?

括號用alter table重命名是有點棘手:

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 

如果這還不夠,那麼你可以DOEXECUTE pg_get_functiondef的輸出解析和重命名後:

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

RENAME TO在CREATE TRIGGER語句中更改對重命名觸發器函數的所有引用,所以我無法使用它來進行備份。 – Jarek