Re: Analysis Function

Поиск
Список
Период
Сортировка
От David Jarvis
Тема Re: Analysis Function
Дата
Msg-id AANLkTim6TrfgLiXM3sTSx6rgXQ3zNLTWBTD_MbU0OPsv@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Analysis Function  (David Jarvis <thangalin@gmail.com>)
Ответы Re: Analysis Function  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-performance
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

В списке pgsql-performance по дате отправления:

Предыдущее
От: David Jarvis
Дата:
Сообщение: Re: Analysis Function
Следующее
От: Bob Lunney
Дата:
Сообщение: Re: Query about index usage