Search Postgresql Archives

Re: Multi-Table Insert/Update Strategy - Use Functions/Procedures?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Don Parris wrote:
I have several tables...
and want db users to be able to add or update ...
... in one step, and get all the information
into the correct tables.

I think I am ok with setting the privileges on the tables and columns as
appropriate to allow each group to select, insert and update the
appropriate data, and I can create appropriate views for them ...

Ideally, the db user just says "I want to enter Joe Public, and Joe is
affiliated with the Widget Corp entity, and has the phone numbers..."

Am I on the right track, or is there some better way to set this up?  My
understanding is that views really aren't meant for insert/update
operations, and I have seen on the web that using views to insert/update
is a bit tricky - and still requires a procedure with a rule on the view.

The way I do it for the insert case is to define an INSTEAD OF INSERT trigger on the view:

CREATE OR REPLACE VIEW protected.bond_ask AS
 SELECT ...
   FROM private.bond_ask
   JOIN private.order_book ON ...
 ;

CREATE OR REPLACE FUNCTION protected.bond_ask_iit()
  RETURNS trigger AS
$BODY$
BEGIN
	...

  INSERT INTO private.order_book (...)
    VALUES (...) RETURNING order_book_id INTO new.order_book_id;

  INSERT INTO private.bond_ask (...)
    VALUES (...)
    RETURNING bond_id into new.bond_id;
  RETURN NEW;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE SECURITY DEFINER;

CREATE TRIGGER bond_ask_iit
  INSTEAD OF INSERT
  ON protected.bond_ask
  FOR EACH ROW
  EXECUTE PROCEDURE protected.bond_ask_iit();

And then grant insert privilege on the view.

You can probably do something similar for updates.

--B




--
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux