As funções que fiz nesse exemplo usei o NetBeans. O Code::Blocks só travava na minha máquina.
É preciso colocar como diretório de inclusão de cabeçalhos /usr/include/postgresql/server . Claro esse caminho pode variar de distro.
Exemplo 1: Soma de dois parâmetros inteiros.
#include<postgres.h>
#include <fmgr.h>
#include<funcapi.h>
PG_MODULE_MAGIC;
PG_FUNCTION_INFO_V1(soma);
Datum soma(PG_FUNCTION_ARGS) {
PG_RETURN_INT32( PG_GETARG_INT32(0)+PG_GETARG_INT32(1));
}
- PG_MODULE_MAGIC: Esta macro obrigatória indica que o arquivo .so é válido para ser usado pelo PostgreSQL.
- PG_FUNCTION_INFO_V1: Cada função C que vai ser utilizada no banco deve ser declarada com o uso desta macro.
- Datum: O retorno da função deve ser sempre do tipo Datum.
- PG_FUNCTION_ARGS: A lista de parâmetros de entrada da função. Use a macro PG_GETARG_xxx(x) para pegar esses valores de entrada.
- PG_RETURN_xxx(x): Use no lugar de return.
Na Makefile do NetBeans eu coloco a seguinte linha no começo do arquivo para ele copiar o teste.so para /tmp e ficar mais fácil com permissões.
install: build
cp -f $(CND_ARTIFACT_PATH_Debug) /tmp/teste.so
Agora eh só declarar a função no SQL com os parâmetros de entrada e saída adequados.
CREATE FUNCTION soma(integer,integer) RETURNS integer
AS '/tmp/teste.so', 'soma'
LANGUAGE C STRICT;
Nenhum comentário:
Postar um comentário