存在する場合、指定されたテーブル名を切り捨てる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
今、私はそれをハーコードされた名前の簡単な手順で動作させることができます:
do $$
begin
IF EXISTS (SELECT *
FROM information_schema.tables
WHERE table_name = genre_epf)
THEN
TRUNCATE genre_epf;
END IF;
end
$$;
しかし、両方のクエリをどのように混合するかについて頭を抱えることはできません。ここで何が悪いのですか?
変数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 $$;
クエリの出力は必要ないため、PERFORM
ではなくSELECT
を使用していることに注意してください。クエリが行を返すかどうかを知りたい(FOUND = true
) か否か (FOUND = false
)。