CREATING USERS

From: Aaron Spiteri <aaron(at)m1group(dot)com(dot)au>
To: pgsql-admin(at)postgresql(dot)org
Subject: CREATING USERS
Date: 2002-04-24 00:42:53
Message-ID: 20020424.425300@scooby.m1group.com.au
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-admin

I am having some trouble with a PL/SQL script I have been trying to
write. The idea is that a table is created called user_table, This
stores extra information about each user on the system. There is a link
in the user_table called usename which links up to pg_shadow.username. I
want to be able to create new users, alter existing users or drop users
depending on insertion, deletion or altercation of the user_table. The
code I wrote looks like this:

CREATE FUNCTION insert_svoc_user() RETURNS OPAQUE AS '
DECLARE
r record;
b bool DEFAULT ''f'';
BEGIN
FOR r IN SELECT pg_shadow.usename FROM pg_shadow WHERE pg_shadow.usename
= NEW.usename LOOP
IF r.usename = NEW.usename THEN
b := ''t'';
END IF;
END LOOP;
IF b = ''t'' THEN
ALTER USER NEW.usename IN GROUP NEW.groname;
ELSE
CREATE USER NEW.usename IN GROUP NEW.groname;
END IF;
RETURN NEW;
END;
'
LANGUAGE 'plpgsql';

/*
* update_user
* -----------
* This functions changes a users group on update of the user_table table
*/
CREATE FUNCTION update_svoc_user() RETURNS OPAQUE AS '
DECLARE
r record;
b bool DEFAULT ''f'';
BEGIN
FOR r IN SELECT usename FROM pg_shadow WHERE pg_shadow.usename =
NEW.usename LOOP
IF r.username = NEW.usename THEN
b := ''t'';
END IF;
END LOOP;
IF b = ''f'' THEN
CREATE USER NEW.usename IN GROUP NEW.groname;
END IF
IF NOT NEW.groname = OLD.groname AND b = ''t'' THEN
ALTER USER NEW.usename IN GROUP NEW.groname;
END IF;
RETURN NEW;

END;
'
LANGUAGE 'plpgsql';

/*
* delete_user
* This function removes a user from the database if they are deleted
from
* the user_det table.
*
*/
CREATE FUNCTION delete_svoc_user() RETURNS OPAQUE AS '
DECLARE
r record;
BEGIN
FOR r IN SELECT usename FROM pg_shadow WHERE pg_shadow.usename =
OLD.usename LOOP
IF r.usename = OLD.usename THEN
DROP USER OLD.usename;
END IF;
END LOOP;
RETURN OLD;
END;
'
LANGUAGE 'plpgsql';

I am continuusly getting an error Can not copyObject() error writing to
$1. I have looked up the pg archives and think the problem may be a
limitation with in the PL SQL code, thus I was thinking of trying to
rewrite it in PL/ TCL can anyone give some pointers on how to do this.

Aaron

Browse pgsql-admin by date

  From Date Subject
Next Message Aaron Spiteri 2002-04-24 02:10:34 upgrade on debian
Previous Message Bradley Kieser 2002-04-23 23:52:22 JDBC driver and JBuilder 4 on Linux Anyone had success?