因此,我需要创建一个函数,该函数可以生成模式和表名依赖于参数send的模式&表名,称为_schema_name表示模式名,而表名依赖于_schema_name。
现在我的pgsql函数代码:
CREATE OR REPLACE FUNCTION public.addschema(_schema_name character varying, _tp_table_name character varying )
RETURNS character varying
LANGUAGE plpgsql
AS $function$
begin
execute format('CREATE schema %I',_schema_name);
execute format('CREATE TABLE %I.%I( id uuid NOT NULL DEFAULT uuid_generate_v4(),
raw_id uuid NULL)', _schema_name, _tp_table_name);
RETURN _schema_name;
END;
$function$
;因此,我使用以下方法来运行这个函数:
select addschema('newschema','new_tbl');我犯了这样的错误:
SQL Error [22023]: ERROR: unrecognized format() type specifier "I"
Hint: For a single "%" use "%%".
Where: PL/pgSQL function addschema(character varying,character varying) line 11 at EXECUTE有什么线索吗?谢谢。。
发布于 2021-09-17 12:22:06
问题必须在客户端的某个地方。你的功能看起来很好。我在psql、pgAdmin4和DBeaver 21.2.0.202108310918中测试了它(稍微格式化)。一切都很好:
CREATE OR REPLACE FUNCTION public.addschema(_schema_name text, _tp_table_name text )
RETURNS text
AS $$
BEGIN
EXECUTE format('CREATE SCHEMA %I;',_schema_name);
EXECUTE format('CREATE TABLE %I.%I( id uuid NOT NULL DEFAULT uuid_generate_v4(),
raw_id uuid NULL)', _schema_name, _tp_table_name);
RETURN _schema_name;
END
$$ LANGUAGE plpgsql;DBeaver截图:

或者,您可以查看数据库日志文件,查看查询是如何实际发送到数据库的。此外,如果您使用的是较早的PostgreSQL版本,则只有在PostgreSQL 9.6+之后才支持format()
https://stackoverflow.com/questions/69222685
复制相似问题