pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Marek Lewczuk <newsy@lewczuk.com>
To: jzobel@heute-morgen.de
Cc: Lista dyskusyjna pgsql-general <pgsql-general@postgresql.org>
Subject: Re: Get current trasanction id
Date: Tue, 28 Dec 2004 16:51:36 +0100
Message-ID: <41D18108.1080901@lewczuk.com> (raw)
In-Reply-To: <1104246353.22419.216.camel@localhost>
References: <41CFCD69.6010503@lewczuk.com>
	<20041227145406.GA73681@winnie.fuhr.org>
	<41D06889.9040503@lewczuk.com>
	<1104246353.22419.216.camel@localhost>

Joachim Zobel napisał(a):
> Am Mo, den 27.12.2004 schrieb Marek Lewczuk um 20:54:
> 
>>Michael Fuhr napisał(a):
>>
>>>Why do you want the transaction ID?  What problem are you trying
>>>to solve?
>>>
>>
>>I've already solved the problem - I found somewhere on the web a very 
>>simple C function, which returns transaction id. I need transaction id 
>>for plperl functions setVar, getVar (using $_SHARED array). Functions 
>>can write/read variables which are available either for connection or 
>>transaction.
> 
> 
> It would be nice to have that in pgplsql. I once needed a transaction Id
> in oracle for a historisation trigger. It saves before copies of the
> modified records on a per transaction basis.
As I wrote before you can have it in plpgsql - you just need to install 
special c function as e.g getCurrentTransactionId() and you will be able 
to get id from within plpgsql - but I agree that this function should be 
in base SQL functions or at least in contrib modules.

C function is very simple:

getcurrenttransactionid.c:
#include "postgres.h"
#include "access/xact.h"

Datum getcurrenttransactionid(PG_FUNCTION_ARGS)
{
         TransactionId xid = GetCurrentTransactionId();
         PG_RETURN_INT32((int32) xid);
}


getcurrenttransactionid.sql:
SET search_path = public;

CREATE FUNCTION getCurrentTransactionId()
	RETURNS integer
	AS 'MODULE_PATHNAME'
	LANGUAGE 'c';



Regards,

Marek Lewczuk

 



view thread (7+ messages)

Message-ID: <41D18108.1080901@lewczuk.com>
Permalink:  ../41D18108.1080901@lewczuk.com/
Also on:    postgresql.org/message-id/41D18108.1080901@lewczuk.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: newsy@lewczuk.com, jzobel@heute-morgen.de, pgsql-general@postgresql.org
  Subject: Re: Get current trasanction id
  In-Reply-To: <41D18108.1080901@lewczuk.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox