Re: PostgreSQL C Language Extension with C++ Code

From: TalGloz <glozmantal(at)gmail(dot)com>
To: pgsql-general(at)postgresql(dot)org
Subject: Re: PostgreSQL C Language Extension with C++ Code
Date: 2018-08-12 20:55:30
Message-ID: 1534107330015-0.post@n3.nabble.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

OK It worked. This is how I did it, hopefully it is right

extern "C" {
#include <postgres.h>
#include <utils/rel.h>
#include <fmgr.h>
#include <utils/array.h>
#include <utils/builtins.h>
#include <catalog/pg_type.h>
#include <stdlib.h>
#include <stdint.h>

PG_MODULE_MAGIC;
}

#include <string>
#include <vector>
#include <iostream>
#include <fstream>
#include <seal/seal.h> // external compiled c++ library linked on running
'make'

extern "C" {
Datum sum_of_numbers(PG_FUNCTION_ARGS){
std::vector<int> numbers {23, 445, 64};
int sum = 0;
for (auto &item : numbers){
sum += item;
}
return sum;
};
PG_FUNCTION_INFO_V1(sum_of_numbers);
}

I've managed to create and execute the function in my PostgreSQL database.

So basically I can execute any CPP code as long as I declare my functions
like this:

extern "C" {
Datum function_name(PG_FUNCTION_ARGS){
// CPP code here
};

PG_FUNCTION_INFO_V1(function_name);
}

In addition tho thath, all the C headers should be * inside a extern "C" {
}* block and all the CPP headers *outside the extern "C" { }* block, did I
get it right?

Thanks,
Tal

--
Sent from: http://www.postgresql-archive.org/PostgreSQL-general-f1843780.html

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Stephen Frost 2018-08-12 21:29:53 Re: Replication failure, slave requesting old segments
Previous Message Adrian Klaver 2018-08-12 20:23:29 Re: Replication failure, slave requesting old segments