PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Membuat tes ekstensi di postgresql

Ini adalah contoh minimal yang berfungsi jika Anda memiliki postgresql-server paket pengembangan untuk ubuntu terinstal

extension.c
Ekstensi sederhana

/* 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
Makefile sederhana untuk mengilustrasikan cara membuat ekstensi.

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

buat-fungsi.sql
Skrip sederhana untuk membuat fungsi

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

Seperti yang terlihat dari pertanyaan Anda, Anda akan dapat memahami apa fungsinya dan juga bagaimana membuatnya bekerja untuk kasus penggunaan Anda.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Fungsi Postgres jauh lebih lambat saat menggunakan variabel input

  2. Akses DB RDS Pribadi Dari VPC Lain

  3. Menggunakan CASE di PostgreSQL untuk memengaruhi beberapa kolom sekaligus

  4. Kembalikan nilai kolom pra-PERBARUI menggunakan SQL saja

  5. Postgres - Apakah ini cara yang tepat untuk membuat indeks parsial pada kolom boolean?