Re: calling elog possibly causing problem in DirectFunctionCall1
Re: calling elog possibly causing problem in DirectFunctionCall1
От:
Tom Lane <tgl@sss.pgh.pa.us>
Дата:
"Rajesh Kumar Mallah" writes:
> data->time_stamp =
> DirectFunctionCall1(timestamptz_in, CStringGetDatum("now"));
This code is incorrect, as timestamptz_in takes three arguments.
regards, tom lane
calling elog possibly causing problem in DirectFunctionCall1
От:
"Rajesh Kumar Mallah" <mallah.rajesh@gmail.com>
Дата:
Hi ,
In certain C trigger function following code snippet causes ERROR:
---------------------------------------------------
elog (NOTICE , "before calling DirectFunctionCall1");
data->time_stamp =
DirectFunctionCall1(timestamptz_in, CStringGetDatum("now"));
elog (NOTICE , "after calling DirectFunctionCall1");
----------------------------------------------------
begin work;INSERT INTO audittest.test_table (name,foo) values ('test','test'); rollback;
BEGIN
NOTICE: before calling DirectFunctionCall1
ERROR: timestamp(-1073748880) precision must be between 0 and 6
ROLLBACK
If the elog before DirectFunctionCall1 is removed the code works fine.
begin work;INSERT INTO audittest.test_table (name,foo) values ('test','test'); rollback;
BEGIN
NOTICE: after calling DirectFunctionCall1
INSERT 0 1
ROLLBACK
Can anyone please explain how removing a elog makes a difference?
Regds
Mallah.
Re: calling elog possibly causing problem in DirectFunctionCall1
От:
"Rajesh Kumar Mallah" <mallah.rajesh@gmail.com>
Дата:
On 12/1/06, Tom Lane <tgl@sss.pgh.pa.us> wrote:
Dear Sir,
thanks for the kind reply.
field time_stamp of data is declared as:
Datum time_stamp;
it is supposed to be populated with current timestamp , (now())
can you please tell me what should be passed as the third argument?
Regds
Mallah.
"Rajesh Kumar Mallah" <mallah.rajesh@gmail.com> writes:
> data->time_stamp =
> DirectFunctionCall1(timestamptz_in, CStringGetDatum("now"));
This code is incorrect, as timestamptz_in takes three arguments.
Dear Sir,
thanks for the kind reply.
field time_stamp of data is declared as:
Datum time_stamp;
it is supposed to be populated with current timestamp , (now())
can you please tell me what should be passed as the third argument?
Regds
Mallah.
regards, tom lane
Re: calling elog possibly causing problem in DirectFunctionCall1
От:
"Rajesh Kumar Mallah" <mallah.rajesh@gmail.com>
Дата:
On 12/1/06, Tom Lane <tgl@sss.pgh.pa.us> wrote:
replaced it with:
data->time_stamp = DirectFunctionCall3(timestamptz_in,
CStringGetDatum("now"),
ObjectIdGetDatum(InvalidOid),
Int32GetDatum(-1))
now it works fine. (code lifted from contrib/spi/moddatetime.c(line 73)
hopefully its correct.
"Rajesh Kumar Mallah" <mallah.rajesh@gmail.com> writes:
> data->time_stamp =
> DirectFunctionCall1(timestamptz_in, CStringGetDatum("now"));
This code is incorrect, as timestamptz_in takes three arguments.
replaced it with:
data->time_stamp = DirectFunctionCall3(timestamptz_in,
CStringGetDatum("now"),
ObjectIdGetDatum(InvalidOid),
Int32GetDatum(-1))
now it works fine. (code lifted from contrib/spi/moddatetime.c(line 73)
hopefully its correct.
regards, tom lane