Zol*_*kos 6 sql postgresql truncate plpgsql search-path
我有以下代码来创建一个函数,web_channel2如果表不为空,则截断表中的所有行:
create or replace function truncate_if_exists(tablename text)
returns void language plpgsql as $$
begin
select
from information_schema.tables
where table_name = tablename;
if found then
execute format('truncate %I', tablename);
end if;
end $$;
Run Code Online (Sandbox Code Playgroud)
不幸的是我不知道应该如何继续...如何执行该函数?
Erw*_*ter 10
要执行 Postgres函数(返回 void),请使用以下命令调用它SELECT:
SELECT truncate_if_exists('web_channel2');
Run Code Online (Sandbox Code Playgroud)
……我该怎么继续?
再次删除该功能。
DROP FUNCTION truncate_if_exists(text);
Run Code Online (Sandbox Code Playgroud)
它不提供任何对表进行模式限定的方法。使用它可能会截断错误的表......
如果表不存在,您似乎正在尝试避免异常。
而你只想截断......
如果表不为空
为此,我可能会使用这样的安全函数:
SELECT truncate_if_exists('web_channel2');
Run Code Online (Sandbox Code Playgroud)
要执行,请使用以下命令调用它SELECT:
SELECT truncate_if_exists('web_channel2');
Run Code Online (Sandbox Code Playgroud)
如果没有提供模式,该函数将回退到遍历search_path- 就像原来的那样。如果这是不可靠的,或者通常是安全的(这在截断表时似乎是谨慎的!),请显式提供模式:
SELECT truncate_if_exists('web_channel2', 'my_schema');
Run Code Online (Sandbox Code Playgroud)
db<>在这里摆弄
当以字符串形式提供标识符时,您需要使用精确的大小写。
为什么使用自定义变量_row_found而不是FOUND?看:
基本:
| 归档时间: |
|
| 查看次数: |
13443 次 |
| 最近记录: |