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:
"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:
"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

FAQ