Я пытаюсь получить функцию 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
$$;
Но я не могу понять, как смешать оба запроса. Что я здесь не так делаю?
postgresql
functions
Stanislasdrg Восстановить Монику
источник
источник
TRUNCATE tableName;
. Вы пытаетесьtableName
Ответы:
Используйте переменную FOUND :
Обратите внимание, что я использовал
PERFORM
вместо того, чтобыSELECT
мне не нужен вывод запроса. Я хочу знать, возвращает ли запрос какую-либо строку (FOUND = true
) или нет (FOUND = false
).источник