sql >> Databasteknik >  >> RDS >> PostgreSQL

Skapa ett tilläggstest i postgresql

Detta är ett minimalt exempel som fungerar om du har postgresql-server utvecklingspaket för ubuntu installerat

tillägg.c
En enkel tillägg

/* 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
En enkel Makefile för att illustrera hur du kan bygga tillägget.

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
Ett enkelt skript för att skapa funktionen

CREATE OR REPLACE FUNCTION 
    compare_strings(VARCHAR,VARCHAR) RETURNS integer AS 'my-extension' 
LANGUAGE C STRICT;

Som det verkar av din fråga kommer du att kunna förstå vad detta gör och även hur du får det att fungera för ditt användningsfall.



  1. Hur man infogar ett hebreiskt värde i en mysql db i php

  2. Hur får man MySQL-servern att fungera efter OSX Yosemite-uppgraderingen?

  3. HQL hur man går med tre bord

  4. Tillåten minnesstorlek på 134217728 byte är slut (försökte allokera 4294967296 byte)