在PL/pgSQL上perform和execute有什么区别?
从手册中:
有时,对表达式求值或选择查询但放弃结果是有用的,例如,在调用具有副作用但没有有用结果值的函数时。要在PL/pgSQL中执行此操作,请使用PERFORM语句。
但是,当我尝试像这样的事情时:

perform 'create table foo as (select 1)';

什么都没发生。尽管这个查询应该有副作用(创建表),而且结果可以被丢弃。
我想我有一件事是对的:为了运行我可以使用perform的函数:
perform pg_temp.addInheritance(foo);

最佳答案:

PERFORMSELECTSELECTINTOSQLSELECTPERFORM
CREATE OR REPLACE FUNCTION foo()
RETURNS void AS $$
BEGIN
  RAISE NOTICE 'Hello from void function';
END;
$$ LANGUAGE plpgsql;

-- direct call from SQL
SELECT foo();

-- in PLpgSQL
DO $$
BEGIN
  SELECT foo(); -- is not allowed
  PERFORM foo(); -- is ok
END;
$$;

PERFORM
语句执行一个参数并忘记结果。
你的例子
perform 'create table foo as (select 1)';

SELECT 'create table foo as (select 1)'
相同。它返回一个字符串“create table foo as(select 1)”,这个字符串被丢弃。
EXECUTE
语句对表达式求值以获取字符串。下一步将执行此字符串。
所以
EXECUTE 'create table ' || some_var || '(a int)';
有两个步骤
计算表达式
'create table ' || some_var || '(a int)'

例如,如果
some_var
是mytab,则执行命令
create table mytab(a int)

当赋值语句中不使用函数时,
PERFORM
语句用于函数调用。
EXECUTE
用于动态SQL的计算-当在运行时知道某种形式的SQL命令时。