以与您所想到的类似的方式进行简化:
DO$do$BEGIN IF NOT EXISTS ( SELECt FROM pg_catalog.pg_roles -- SELECT list can be empty for this WHERe rolname = 'my_user') THEN CREATE ROLE my_user LOGIN PASSWORD 'my_password'; END IF;END$do$;
例如,与之不同的CREATE TABLE是,没有
IF NOT EXISTSfor子句
CREATE ROLE(至少第12页)。而且,您无法在普通SQL中执行动态DDL语句。
您无法“避免
PL / pgSQL”的请求,除非使用另一个PL。该DO语句使用plpgsql作为默认过程语言。该语法允许省略显式声明:
DO [ LANGUAGE lang_name ] pre
… 编写代码所用的过程语言的名称。如果省略,则默认值为。
lang_name
plpgsql



