And*_*rey 7 sql postgresql psql postgres-9.6
是否有一种简单的方法可以创建CREATE FUNCTION IF NOT EXISTS?我有多个模式,并且正在准备一个脚本,该脚本将在目标模式中创建丢失的对象。计划是运行一个脚本来检查对象是否存在,如果不存在则不执行任何操作,它将创建它。“如果不存在则创建一些内容”可以完美地处理表序列和其他内容,但是无法找到函数的解决方案。我来自 Tsql 世界,它有这个检查。然而,Postgres 9.6 似乎没有它。有什么简单的方法可以绕过这个限制吗?
小智 9
您可以使用create or replace- 但如果函数的签名发生更改,则不起作用。
另一种选择是使用drop function if exists后跟create function. 只需确保您在此之后再次设置所需的权限即可。
您可以使用匿名块包装函数定义并处理重复名称异常:
\n\n\n\n\nRun Code Online (Sandbox Code Playgroud)\ncreate function f(int)\nreturns int\nlanguage sql\nas \'select $1\';\n\xe2\x9c\x93
\n
\n\n\nRun Code Online (Sandbox Code Playgroud)\ndo $$\nbegin\n create function f (int)\n returns int\n language sql\n as \'select $1\';\nend; $$\n\n错误:具有相同参数类型的函数“f”已存在\n上下文:SQL 语句“create function f (int)\n returns int\n language sql\n as \'select $1\'”\nPL/pgSQL function inline_code_block line 3 at SQL 语句\n\n
\n\nRun Code Online (Sandbox Code Playgroud)\ndo $$\nbegin\n create function f (int)\n returns int\n language sql\n as \'select $1\';\n \n exception\n when duplicate_function then\n null;\nend; $$\n\xe2\x9c\x93
\n
db<>在这里摆弄
\n| 归档时间: |
|
| 查看次数: |
14668 次 |
| 最近记录: |