在pgadmin中重构更多函数的最佳方法

时间:2017-07-04 09:12:08

标签: database postgresql pgadmin

我是PostgreSQL中的新手,我正在寻找一种在多个函数中查找和替换单词(函数名称)的好方法。

我使用的是最新版本的PostgreSQL。

有人知道我怎么能以良好的方式做到这一点?

由于

1 个答案:

答案 0 :(得分:1)

pgadmin为此类操作提供"查找和替换" 窗口。对方法保持中立(如果pgadmin提供 - 那么我不能说这是一个不好的做法)你可以从pg_catalog复制所有函数定义并使用这种方法来实现"批量"对象在函数体内重命名。或者选择替换,然后运行更改的定义。

这就是为什么我建议不要这样做。我们假设您要在所有功能中将length(更改为new_length(。如果你只是

t=# select proname,replace(prosrc,'length(','new_length(') from pg_proc where prosrc like '%length(%' limit 3;
  proname   |                  replace
------------+--------------------------------------------
 bit_length | select pg_catalog.octet_new_length($1) * 8
 bit_length | select pg_catalog.octet_new_length($1) * 8
 bit_length | select pg_catalog.new_length($1)
(3 rows)

如你所见,你会影响更多的名字然后只是长度。当然,您可以使用.length(来避免octet_lengthbit_length,但不能保证您不会在代码中使用length(不使用pg_catalog.)。等等等等。因此,如果您盲目地更换所有出现的风险,您可能会制造代码。如果你仔细检查它们,你无论如何都会一个接一个地做。所以也许只是经历每一次事件并在改变前检查每一个?..

最后,我使用psql进行此类工作,或者至少将其与pgadmin混合使用。由于psql有一组元命令,非常有用。例如,函数定义只能通过sf fn_name获得。运行定义将其放入历史记录中,可以在vim或任何其他编辑器中轻松编辑,并使用更改的名称重新运行。 (vim提供:%s/oldname/newname/g,它是相同的查找和替换等等......)