У меня есть простая функция Postgres, в которой я хочу взять table_name в качестве параметра, передать его в аргумент и удалить данные из таблицы по условию.
CREATE OR REPLACE FUNCTION cdc.audit_refresh(tablename text)
RETURNS integer AS
$$
BEGIN
delete from tablename where id<4;
RETURN(select 1);
END;
$$ LANGUAGE plpgsql;
select cdc.audit_refresh('cdc.adf_test');
Но выдает ошибку, что имя таблицы ОШИБКА: отношение "имя таблицы" не существует в операторе удаления (см. снимок)
Чего вы хотите добиться, так это выполнять операторы Dynamic SQL. Вы можете сделать это с помощью EXECUTE
. Смотрите больше здесь
CREATE OR REPLACE FUNCTION audit_refresh(tablename text)
RETURNS integer AS
$$
DECLARE
stmt TEXT;
BEGIN
stmt = 'delete from '||tablename||' where id<4;';
EXECUTE stmt;
RETURN 1;
END
$$ LANGUAGE plpgsql;
RETURN(select 1);
можно упростить доreturn 1;