Observe que PG_MODULE_MAGIC só deve ser usada uma vez em todo o projeto, senão há erro de compilação.
#include "postgres.h" #include "fmgr.h" #ifdef PG_MODULE_MAGIC PG_MODULE_MAGIC; #endif PG_FUNCTION_INFO_V1(limite_salario); Datum limite_salario(PG_FUNCTION_ARGS) { HeapTupleHeader t = PG_GETARG_HEAPTUPLEHEADER(0); int32 limite = PG_GETARG_INT32(1); bool isnull; Datum salario = GetAttributeByName(t, "salario", &isnull);
if (isnull) PG_RETURN_NULL();
PG_RETURN_BOOL(DatumGetInt32(salario) > limite); }
Existe uma tabela profissional assim:
create table profissional (
id serial primary key,
salario int,
nome varchar
);
Declarar a função assim:
CREATE FUNCTION limite_salario(profissional,int) returns bool
as '/tmp/teste.so', 'limite_salario' language c strict;
Chamar a função assim:
select a.*,limite_salario(a.*,10) from profissional a