Thread: Dynamically create scheme

Dynamically create scheme

From
"Mick van der Most van Spijk"
Date:
Hi,

I am writing an installscript and I would like to create a schema
dynamically, based on a new input.

-- this is the trigger that calls the install script
CREATE TRIGGER tr_install_account AFTER INSERT
 ON accounts FOR EACH ROW
 EXECUTE PROCEDURE install();

-- the install script
1 CREATE OR REPLACE FUNCTION install() RETURNS TRIGGER
2 AS '
3  BEGIN
4   INSERT INTO bedrijven (kvk, account) VALUES (''00000000'', NEW.account);
5   INSERT INTO settings (account, logo) VALUES (NEW.account, '''');

6   CREATE SCHEMA NEW.account;
7   RETURN NEW;
8  END;
9 ' LANGUAGE 'plpgsql';

It goes wrong at line 9. I want to create a schema based on the accountname
supplied. But i cant get it to work. Does anybody know how i get it to work
or what reference i must read?

Regards,

Mick vd Most v Spijk
--
'It never hurts to help' -- Eek the Cat



Re: Dynamically create scheme

From
Bruce Momjian
Date:
I think you need to create a string variable on the function and use
EXECUTE.

---------------------------------------------------------------------------

Mick van der Most van Spijk wrote:
> Hi,
>
> I am writing an installscript and I would like to create a schema
> dynamically, based on a new input.
>
> -- this is the trigger that calls the install script
> CREATE TRIGGER tr_install_account AFTER INSERT
>  ON accounts FOR EACH ROW
>  EXECUTE PROCEDURE install();
>
> -- the install script
> 1 CREATE OR REPLACE FUNCTION install() RETURNS TRIGGER
> 2 AS '
> 3  BEGIN
> 4   INSERT INTO bedrijven (kvk, account) VALUES (''00000000'', NEW.account);
> 5   INSERT INTO settings (account, logo) VALUES (NEW.account, '''');
>
> 6   CREATE SCHEMA NEW.account;
> 7   RETURN NEW;
> 8  END;
> 9 ' LANGUAGE 'plpgsql';
>
> It goes wrong at line 9. I want to create a schema based on the accountname
> supplied. But i cant get it to work. Does anybody know how i get it to work
> or what reference i must read?
>
> Regards,
>
> Mick vd Most v Spijk
> --
> 'It never hurts to help' -- Eek the Cat
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
> http://www.postgresql.org/users-lounge/docs/faq.html
>

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073