如何在表中插入新行时,如何在PostgreSQL中使用触发器来创建新模式?

时间:2011-06-16 13:48:43

标签: postgresql triggers

我有一个包含客户端的表,每个国家/地区只有一个客户端,对于此表中的每一行,我必须创建一个新模式并复制一些表。像这样:

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;';

2 个答案:

答案 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)