我有一个包含客户端的表,每个国家/地区只有一个客户端,对于此表中的每一行,我必须创建一个新模式并复制一些表。像这样:
Clients table's columns:
client country
---------- -----------
john doe US
jane doe UK
架构:
clients_US
clients_UK
我需要创建一个触发器,以便每次将新客户端添加到clients表时自动创建这些模式,并使用国家/地区列数据作为模式名称的一部分。
在完美的世界中,这可行,但显然不会:
CREATE OR REPLACE FUNCTION gcpmanager.create_sle_schema()
RETURNS trigger LANGUAGE plpgsql
AS
'begin
CREATE SCHEMA "clients_" + new.country
AUTHORIZATION postgres;
return new;
end;';
答案 0 :(得分:4)
您需要使用动态SQL
CREATE OR REPLACE FUNCTION gcpmanager.create_sle_schema()
RETURNS trigger LANGUAGE plpgsql
AS
$$
begin
execute 'CREATE SCHEMA clients_'||new.country||' AUTHORIZATION postgres';
return new;
end;
$$
之间:PostgreSQL中的字符串连接运算符为||
而非+
(即数字)
答案 1 :(得分:1)