我是PostgreSQL中的新手,我正在寻找一种在多个函数中查找和替换单词(函数名称)的好方法。
我使用的是最新版本的PostgreSQL。
有人知道我怎么能以良好的方式做到这一点?
由于
答案 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_length
和bit_length
,但不能保证您不会在代码中使用length
(不使用pg_catalog.
)。等等等等。因此,如果您盲目地更换所有出现的风险,您可能会制造代码。如果你仔细检查它们,你无论如何都会一个接一个地做。所以也许只是经历每一次事件并在改变前检查每一个?..
最后,我使用psql
进行此类工作,或者至少将其与pgadmin混合使用。由于psql
有一组元命令,非常有用。例如,函数定义只能通过sf fn_name
获得。运行定义将其放入历史记录中,可以在vim或任何其他编辑器中轻松编辑,并使用更改的名称重新运行。 (vim提供:%s/oldname/newname/g
,它是相同的查找和替换等等......)