Re: audit trail

Поиск
Список
Период
Сортировка
От Mark Stosberg
Тема Re: audit trail
Дата
Msg-id Pine.BSF.4.44.0208241902370.33806-100000@nollie.summersault.com
обсуждение исходный текст
Ответ на audit trail  ("Johnson, Shaunn" <SJohnson6@bcbsm.com>)
Список pgsql-general
On Fri, 23 Aug 2002, Johnson, Shaunn wrote:

> Running PostgreSQL 7.2.1 on RedHat Linux 7.2.
>
> I'm interested in turning on an audit trail
> to note what tables have been updated, created,
> selected from, who did it, what machine / connection
> they're using, etc.

Shaunn,

Here are a couple of references on setting up audit trails in Postgres.
The first is a link to an older mailing list post which provides some
examples:

http://archives.postgresql.org/pgsql-novice/2002-06/msg00001.php

Also, here's some documentation I wrote up myself that I'll eventually
draft into a slightly more formal document if I get around to it.

This is an example of a setting up an audit table for a single table.
The TG_OP variable I use and several other special variables are documented here:

http://www.postgresql.org/idocs/index.php?plpgsql-trigger.html

   -mark

http://mark.stosberg.com/

########################


dcumentation for Setting up Audit Tables in Postgres 7.1.2
Last updated on 2/12/02 by Mark Stosberg
----------------------------------------

1. make PL/pgSQL available (as super-user)
    (We can add this to the template1 database if we want it available to all new databases)

    CREATE FUNCTION plpgsql_call_handler ()
    RETURNS OPAQUE
    AS '/usr/local/pgsql/lib/plpgsql.so'
    LANGUAGE 'c';

    CREATE TRUSTED PROCEDURAL LANGUAGE 'plpgsql'
    HANDLER plpgsql_call_handler
    LANCOMPILER 'PL/pgSQL';

2. Create Audit Table with timestamp column

    DROP TABLE t_audit;
    CREATE TABLE t_audit (
        c1 int,
        transaction_dml varchar(10), -- tells us "UPDATE" or "DELETE"
        transaction_time timestamp DEFAULT CURRENT_TIMESTAMP
    );

3. Create logging Functions
-- -------------------------
-- *** Warning ***
-- If you modify the function you MUST drop and recreate the event trigger.
-- If not, you get a cache error.

-- The update function needs to return the NEW row
DROP FUNCTION t_audit_update();
CREATE FUNCTION t_audit_update() RETURNS OPAQUE AS 'begin
insert into t_audit (c1,transaction_dml) values (OLD.c1,TG_OP);
    return NEW;  end;  ' LANGUAGE 'plpgsql';

-- the delete function needs to return the OLD row
DROP FUNCTION t_audit_delete();
CREATE FUNCTION t_audit_delete() RETURNS OPAQUE AS 'begin
insert into t_audit (c1,transaction_dml) values (OLD.c1,TG_OP);
    return OLD;  end;  ' LANGUAGE 'plpgsql';


-- 4. Setup Event triggers
--------------------------------------------------
DROP TRIGGER t_audit_update_trigger ON t;
CREATE TRIGGER "t_audit_update_trigger" BEFORE UPDATE ON "t"
FOR EACH ROW EXECUTE PROCEDURE "t_audit_update" ('');

DROP TRIGGER t_audit_delete_trigger ON t;
CREATE TRIGGER "t_audit_delete_trigger" BEFORE DELETE ON "t"
FOR EACH ROW EXECUTE PROCEDURE "t_audit_delete" ('');








В списке pgsql-general по дате отправления:

Предыдущее
От: Martijn van Oosterhout
Дата:
Сообщение: Re: CREATE INDEX .. ON table1 (field1 asc, field2 desc)
Следующее
От: "Kanjisoft Systems"
Дата:
Сообщение: What is the listserv address?