我确定之前有人问过这个问题,但是我无法通过搜索来找到它。所以至少如果它被标记为重复,也许在这里找到它会更容易。 Postgres文档没有帮助我。
我有以下SQL:
create table foobar(col1 bool);
create or replace function foo(tablename varchar) returns void as $func$
begin
alter table tablename add column if not exists bar boolean;
end;
$func$ language plpgsql;
select foo('foobar');
我期待发生的事情:
实际发生的是,前两个SQL语句成功执行但第三个失败:
错误:关系“tablename”不存在
我的IDE告诉我这应该没问题。我已经讨论了一段时间了,除非使用format()字符串替换,否则无法想出一种合作的方法:
create or replace function foo(tablename varchar) returns void as $func$
begin
execute(format('alter table %I add column if not exists bar boolean;', tablename));
end;
$func$ language plpgsql;
真的没有办法做到这一点吗?