PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Tạo kiểm tra tiện ích mở rộng trong postgresql

Đây là một ví dụ tối thiểu hoạt động nếu bạn có postgresql-server gói phát triển cho ubuntu được cài đặt

extension.c
Một tiện ích mở rộng đơn giản

/* 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
Một Makefile đơn giản để minh họa cách bạn có thể tạo tiện ích mở rộng.

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
Một tập lệnh đơn giản để tạo hàm

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

Có vẻ như từ câu hỏi của bạn, bạn sẽ có thể hiểu điều này có tác dụng gì và cũng như cách làm cho nó hoạt động cho trường hợp sử dụng của bạn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. không cho phép thực thi root máy chủ PostgreSQL

  2. PostgreSQL:Vi phạm duy nhất:7 LỖI:giá trị khóa trùng lặp vi phạm ràng buộc duy nhất users_pkey

  3. Lỗi khóa trong câu lệnh INSERT

  4. PGError:ERROR:quan hệ delay_jobs không tồn tại (Postgresql, rails 3.04, delay_job error)

  5. Giao dịch tự trị trong PostgreSQL 9.1