如何在 PostgreSQL 中复制函数

Posted

技术标签:

【中文标题】如何在 PostgreSQL 中复制函数【英文标题】:How to copy function in PostgreSQL 【发布时间】:2016-08-05 11:09:48 【问题描述】:

我想编写 sqitch 部署脚本来创建新版本的触发器。为确保恢复脚本将功能恢复到以前的版本,我想对此功能进行备份。有什么方法可以用新名称复制(RENAME TO 不起作用!)触发函数?

【问题讨论】:

pg-proc?我猜你对pronameprosrc 专栏很感兴趣。 如果您使用sqitch rework,还原脚本将是您原始部署脚本的副本。 【参考方案1】:

重命名为应该可以。您是否忘记了括号或将它们包含在另一边?

alter table rename 的括号有点棘手:

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);

【讨论】:

RENAME TO 更改了 CREATE TRIGGER 语句中对重命名触发器函数的所有引用,因此我无法使用它进行备份。

以上是关于如何在 PostgreSQL 中复制函数的主要内容,如果未能解决你的问题,请参考以下文章

使用命令行参数运行 PostgreSQL .sql 文件

云小课|教你如何使用RDS for PostgreSQL插件

如何运行从 postgresql 中的函数生成的查询

春季启动中的postgresql错误

Postgresql 用户管理

PostSQL | Debug记录