Как использовать триггер в PostgreSQL для создания новой схемы, когда новая строка вставляется в таблицу? - PullRequest
4 голосов
/ 16 июня 2011

У меня есть таблица, которая содержит клиентов, у меня есть только один клиент на страну, и для каждой строки в этой таблице я должен создать новую схему и реплицировать некоторые таблицы.Например:

Clients table's columns: 

client      country
----------  -----------
john doe    US
jane doe    UK

Схемы:

clients_US
clients_UK

Мне нужно создать триггер для автоматического создания этих схем при каждом добавлении нового клиента в таблицу клиентов с использованием данных столбца страны.как часть имени схемы.

В идеальном мире это будет работать, но это явно не так:

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 ]

4 голосов
/ 16 июня 2011

Вам нужно будет использовать динамический 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 голос
/ 16 июня 2011

Используйте для этого динамический SQL:

http://www.postgresql.org/docs/9.0/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...