PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Tworzenie testu rozszerzenia w postgresql

To jest minimalny przykład, który działa, jeśli masz postgresql-server zainstalowany pakiet rozwojowy dla ubuntu

rozszerzenie.c
Proste rozszerzenie

/* 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
Prosty plik Makefile ilustrujący, jak można zbudować rozszerzenie.

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

utwórz-funkcję.sql
Prosty skrypt do tworzenia funkcji

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

Jak wynika z twojego pytania, będziesz w stanie zrozumieć, co to robi, a także jak sprawić, by działało w twoim przypadku użycia.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie Postgres sprawdzające ciąg znaków jest liczbą

  2. Oblicz różnicę między wynikami dwóch zapytań count(*) na podstawie 2 tabel w PostgreSQL

  3. używając logiki warunkowej :sprawdź, czy rekord istnieje; jeśli tak, zaktualizuj go, jeśli nie, utwórz go

  4. Jak zwrócić wstawione wartości wyników zapytania za pomocą pomocników pg-promise

  5. PostgreSQL 11:recenzenci poprawek do partycjonowania