gpt4 book ai didi

在 postgresql 中创建扩展测试

转载 作者:搜寻专家 更新时间:2023-10-30 19:45:37 24 4
gpt4 key购买 nike

我想在 postgres 中创建一个扩展测试(使用 PostGis),所以我想执行以下步骤:

1.- 从 btree_gist 编辑文件 btree_interval.c这样:

gbt_intvkey_cmp(const void *a, const void *b)
{
intvKEY *ia = (intvKEY *) (((const Nsrt *) a)->t);
intvKEY *ib = (intvKEY *) (((const Nsrt *) b)->t);
int res;
......
......

printf("Test for PostGis\n");

return res;
}

只加一个printf,因为我只是想做个小测试

2.- 运行以下命令:

gcc -shared -o btree_gist_test.so -fPIC btree_gist.c

我的疑问是:

1.- I don't know where I can find the file btree_gist.c once postgresql is installed and then run the command above.

如果你问我:“你为什么不直接下载源代码呢?”好吧,因为当我这样做时,我收到了这条错误消息:

 #include "postgres.h"
^
compilation terminated

所以,我认为最好在已安装 postgresql 的同一文件夹中执行此操作。

2.- Once I get the btree_gist_test.so I know that I have to copy to the path /usr/lib/postgresql/lib/, but I'm not sure if I have to create a symbolic link to a somewhere else for this file.

最佳答案

这是一个最小的例子,如果你安装了用于 ubuntu 的 postgresql-server 开发包

扩展.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);
}

生成文件
一个简单的 Makefile 来说明如何构建扩展。

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

创建函数.sql
创建函数的简单脚本

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

从您的问题看来,您将能够理解它的作用以及如何使其适用于您的用例。

关于在 postgresql 中创建扩展测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32985683/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com