Sta*_*ica 10 postgresql functions
我正在尝试获取一个 psql 函数,如果它存在,它将截断给定的表名。我一直在尝试多种功能,但到目前为止都没有奏效。这是代码:
CREATE OR REPLACE FUNCTION truncateIfExists(tableName TEXT)
returns void
as $$
BEGIN
EXECUTE format(
'IF EXISTS (
SELECT *
FROM information_schema.tables
WHERE table_name =' || tableName || '
)
THEN
TRUNCATE tableName;
END IF;
');
END;
$$language plpgsql
Run Code Online (Sandbox Code Playgroud)
现在,我可以使用硬编码名称使其在一个简单的过程中工作:
do $$
begin
IF EXISTS (SELECT *
FROM information_schema.tables
WHERE table_name = genre_epf)
THEN
TRUNCATE genre_epf;
END IF;
end
$$;
Run Code Online (Sandbox Code Playgroud)
但是我无法理解如何混合这两个查询。我在这里做错了什么?
使用变量 FOUND:
create or replace function truncate_if_exists(tablename text)
returns void language plpgsql as $$
begin
perform 1
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)
请注意,我使用了PERFORM
而不是SELECT
因为我不需要查询的输出。我想知道查询是否返回任何行 ( FOUND = true
) 或不返回( FOUND = false
)。
归档时间: |
|
查看次数: |
7653 次 |
最近记录: |