agora inbox for pgsql-sql@postgresql.org
help / color / mirror / Atom feedFrom: Achilleas Mantzios <achill@matrix.gatewaynet.com>
To: pgsql-sql@postgresql.org
Subject: Re: md5 checksum of a previous row
Date: Mon, 13 Nov 2017 09:25:19 +0200
Message-ID: <1bd7533d-1b9d-8ac3-6133-5ae917f8745d@matrix.gatewaynet.com> (raw)
In-Reply-To: <CAMz9UCYU6Vx6E2mtFnvEoFptdmA48d-hHn3x0E-NWuy8Cby5kA@mail.gmail.com>
References: <CAMz9UCYU6Vx6E2mtFnvEoFptdmA48d-hHn3x0E-NWuy8Cby5kA@mail.gmail.com>
List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-sql>
You just need :
- to define the way to find the previous row
- an BEFORE INSERT trigger to compute the checksum, read up some pg/plsql or SQL to write your function. To read the row as a whole just use the table name without column in the select
- two rules (update / delete) to do nothing
On 13/11/2017 08:15, Iaam Onkara wrote:
> Hi,
>
> I have a requirement to create an tamper proof chain of records for audit purposes. The pseudo code is as follows
>
> before_insert:
> 1. compute checksum of previous row (or conditionally selected row)
> 2. insert the computed checksum in the current row
> 3. using on-update or on-delete trigger raise error to prevent update/delete of any row.
>
> Here are the different options that I have tried using lag and md5 functions
>
> http://www.sqlfiddle.com/#!17/69843/2 <http://www.sqlfiddle.com/#%2117/69843/2;
>
> CREATE TABLE test
> ("id" uuid DEFAULT uuid_generate_v4() NOT NULL,
> "value" decimal(5,2) NOT NULL,
> "delta" decimal(5,2),
> "created_at" timestamp default current_timestamp,
> "words" text,
> CONSTRAINT pid PRIMARY KEY (id)
> )
> ;
>
> INSERT INTO test
> (value, words)
> VALUES
> (51.0, 'A'),
> (52.0, 'B'),
> (54.0, 'C'),
> (57.0, 'D')
> ;
>
> select
> created_at, value,
> value - lag(value, 1, 0.0) over(order by created_at) as delta,
> md5(lag(words,1,words) over(order by created_at)) as the_word,
> md5(textin(record_out(test))) as Hash
> FROM test
> ORDER BY created_at;
>
> But how do I use lag function or something like lag to read the previous record as whole.
>
> Thanks,
> Onkara
> PS: This was earlier posted in 'pgsql-in-general' mailing list, but I think this is a more appropriate list, if I am wrong I am sorry
--
Achilleas Mantzios
IT DEV Lead
IT DEPT
Dynacom Tankers Mgmt
view thread (15+ messages) latest in thread
Message-ID: <1bd7533d-1b9d-8ac3-6133-5ae917f8745d@matrix.gatewaynet.com>
Permalink: ../1bd7533d-1b9d-8ac3-6133-5ae917f8745d@matrix.gatewaynet.com/
Also on: postgresql.org/message-id/1bd7533d-1b9d-8ac3-6133-5ae917f8745d@matrix.gatewaynet.com
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-sql@postgresql.org
Cc: achill@matrix.gatewaynet.com
Subject: Re: md5 checksum of a previous row
In-Reply-To: <1bd7533d-1b9d-8ac3-6133-5ae917f8745d@matrix.gatewaynet.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox