在函数体之前或之后声明 "LANGUAGE plpgsql"?

Declare "LANGUAGE plpgsql" before or after the function body?

有什么区别吗:

CREATE FUNCTION func() RETURNS integer
    LANGUAGE plpgsql AS $$
    declare
    begin
      -- do something
    end
$$;

CREATE FUNCTION func() RETURNS INTEGER AS $$
    declare
    begin
      -- do something
    end
$$ LANGUAGE plpgsql;

LANGUAGE plpgsql 基本上只需要超出 $$ 用法的范围吗?

没有任何区别。
函数体是一个字符串文字。 $$ 只是美元引号,也可以是单引号(但最好使用美元引号!):

  • What are '$$' used for in PL/pgSQL
  • Insert text with single quotes in PostgreSQL

CREATE FUNCTION 是声明性的 SQL-DDL 命令,关键字的顺序非常自由,如 definition in the manual 所示。 (命令定义中花括号内的关键字可以随意排列,其余不能)

我最终决定始终将语言声明与函数头的其余部分放在顶部,在函数体之前。更有意义。