无法在psql的函数/过程中创建架构

问题描述

大家好,我在为学校开发管理应用程序,遇到了这个问题:

create or replace procedure create_school_schema(title text)
as
$BODY$
    create schema title;    
$BODY$
language sql

它不将参数值用作模式名称,而是将“ title”作为模式名称? 有了功能,它也能正常工作,但作为回报,它向我显示了我正在传递的参数值。

解决方法

使用EXECUTE的示例函数:

CREATE OR REPLACE PROCEDURE public.create_school_schema(title text)
 LANGUAGE plpgsql
AS $procedure$
    BEGIN
        EXECUTE format('CREATE SCHEMA %I',title);
    END;
$procedure$
;

要使用EXECUTE,您将需要使用plpgsql语言。然后,使用format函数将title变量作为标识符添加到CREATE SCHEMA语句中。所以:

\dn
  List of schemas
  Name  |  Owner   
--------+----------
 public | postgres
 test   | postgres

call create_school_schema('school');
CALL

\dn
  List of schemas
  Name  |  Owner   
--------+----------
 public | postgres
 school | postgres
 test   | postgres