Dies ist ein minimales Beispiel, das funktioniert, wenn Sie den postgresql-server
haben Entwicklungspaket für Ubuntu installiert
extension.c
Eine einfache Erweiterung
/* Postgres headers */
#include <postgres.h>
#include <utils/rel.h>
#include <stdio.h>
#include <string.h>
#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif
static char *
extract_string(text *word)
{
char *head;
char *tail;
if (word == NULL)
return NULL;
head = VARDATA(word);
tail = head + VARSIZE(word) - VARHDRSZ;
tail[0] = '\0';
return head;
}
PG_FUNCTION_INFO_V1(compare_strings);
Datum
compare_strings(PG_FUNCTION_ARGS)
{
char *lhs;
char *rhs;
lhs = extract_string(PG_GETARG_TEXT_P(0));
rhs = extract_string(PG_GETARG_TEXT_P(1));
PG_RETURN_BOOL(strcmp(lhs, rhs) == 0);
}
Makefile
Ein einfaches Makefile, um zu veranschaulichen, wie Sie die Erweiterung erstellen können.
CC = gcc
OBJECT = extension.o
NAME = my-extension.so
CFLAGS = -Wall -Werror -g3 -O0 -I$(shell pg_config --includedir-server)
all: $(OBJECT)
$(CC) -shared -o $(NAME) $(OBJECT)
%.o: %.c
$(CC) -c -fPIC $(CFLAGS) $<
install: all
@install -Dv -m755 $(NAME) $(shell pg_config --pkglibdir)/$(NAME)
@psql -U postgres -f create-function.sql
clean:
@rm -fv *.o *.so
create-function.sql
Ein einfaches Skript zum Erstellen der Funktion
CREATE OR REPLACE FUNCTION
compare_strings(VARCHAR,VARCHAR) RETURNS integer AS 'my-extension'
LANGUAGE C STRICT;
Wie aus Ihrer Frage hervorgeht, können Sie verstehen, was dies bewirkt und wie Sie es für Ihren Anwendungsfall verwenden können.