यह एक न्यूनतम उदाहरण है जो काम करता है यदि आपके पास postgresql-server
. है ubuntu के लिए विकास पैकेज स्थापित
एक्सटेंशन.c
एक साधारण एक्सटेंशन
/* 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);
}
मेकफ़ाइल
एक सरल मेकफ़ाइल यह वर्णन करने के लिए कि आप एक्सटेंशन कैसे बना सकते हैं।
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
फ़ंक्शन बनाने के लिए एक आसान स्क्रिप्ट
CREATE OR REPLACE FUNCTION
compare_strings(VARCHAR,VARCHAR) RETURNS integer AS 'my-extension'
LANGUAGE C STRICT;
जैसा कि आपके प्रश्न से लगता है, आप यह समझने में सक्षम होंगे कि यह क्या करता है और इसे आपके उपयोग के मामले में कैसे काम करना है।