Re: Analysis Function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

Here is code to convert dates from integers without string concatenation:

Edit dateserial.c:
#include "postgres.h"
#include "utils/date.h"
#include "utils/nabstime.h"

#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC
;
#endif

Datum dateserial(PG_FUNCTION_ARGS);

PG_FUNCTION_INFO_V1
(dateserial);

Datum
dateserial
(PG_FUNCTION_ARGS) {
  int32 p_year
= (int32)PG_GETARG_FLOAT8(0);
  int32 p_month
= PG_GETARG_INT32(1);
  int32 p_day
= PG_GETARG_INT32(2);

  PG_RETURN_DATEADT
( date2j( p_year, p_month, p_day ) - POSTGRES_EPOCH_JDATE );
}

Edit Makefile:

MODULES = dateserial
PGXS
:= $(shell pg_config --pgxs)
include $
(PGXS)

Edit inst.sh (optional):

#!/bin/bash

make clean
&& make && strip *.so && make install && /etc/init.d/postgresql-8.4 restart

Run bash inst.sh.

Create a SQL function dateserial:

CREATE OR REPLACE FUNCTION dateserial(double precision, integer, integer)
  RETURNS date AS
'$libdir/dateserial', 'dateserial'
  LANGUAGE
'c' IMMUTABLE STRICT
  COST
1;
ALTER FUNCTION dateserial
(double precision, integer, integer) OWNER TO postgres;

Test the function:

SELECT dateserial( 2007, 5, 5 )
Using this function, performance increases from 4.4s to 2.8s..

Dave


[Postgresql General]     [Postgresql PHP]     [PHP Users]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Yosemite]

  Powered by Linux