Tag: postgresql

什么是链接Postgres服务器端C函数的适当库

我正在尝试使用Ubuntu 14.04在Postgres 9.5的平台上编译一些C扩展。 在我的例子中,我想编写我的C代码并首先将其编译为独立的可执行文件(如下面的Makefile中所示)。 这是因为我还使用NumPy API并编写将Postgres ArrayType数组转换为NumPy PyArray对象的函数,然后使用一些NumPy数组函数。 获取正确的细节,正确释放NpyIter对象等等是非常棘手的,所以我绝对需要编译,运行,观察错误和测试所有内容, 然后在最终部分中为最终部分构建库的详细信息,我说CREATE EXTENSION Postgres中的CREATE EXTENSION 。 编译时,我得到了几个未定义的引用问题,例如: tmp.c:(.text+0x2d6): undefined reference to `get_typlenbyvalalign’ tmp.c:(.text+0x346): undefined reference to `deconstruct_array’ tmp.c:(.text+0x41f): undefined reference to `DatumGetFloat8′ tmp.c:(.text+0x4ae): undefined reference to `pfree’ tmp.c:(.text+0x4ba): undefined reference to `pfree’ 这些是来自Postgres C API的服务器端函数,但是有很多谷歌搜索和许多pgxs我无法弄清楚如何获取我无法链接的后端Postgres库的名称或路径。 几乎所有搜索都提到了libpq ,但是这些函数没有在客户端API库中定义,所以我正在寻找其他东西。 作为参考,这是我目前正在使用的Makefile。 包括来自pg_config –libdir的库目录也必须是不正确的,因为它不会导致未定义的引用错误的任何更改。 INCLUDEDIRS := -I. INCLUDEDIRS += -I/usr/include/python2.7 INCLUDEDIRS […]

在使用C函数扩展PostgreSQL时实现高性能事务

我的目标是实现可用于将数据块从数据库复制到C函数的最高性能,以便作为查询结果进行处理和返回。 我是PostgreSQL的新手,我目前正在研究移动数据的可能方法。 具体来说,我正在寻找与PostgreSQL特别相关的细微差别或关键词来快速移动大数据。 注意: 我的最终目标是速度,所以我愿意接受我提出的确切问题之外的答案,只要它获得大的性能结果。 例如,我遇到了COPY关键字(仅限PostgreSQL),它可以快速地将数据从表格移动到文件中; 反之亦然。 我试图远离数据库外部的处理,但如果它提供的性能改进超出了外部处理的明显缺点,那么就这样吧。

ODBC v Libpq:PostgreSQL的C库

我将使用C库连接和使用PostgreSQL数据库,我想知道ODBC和Libpq的优缺点是什么。 据我所知,libpq似乎更快,但我无法获得任何明确的答案或基准。 还有,还有其他任何可能比ODBC / Libpq更好的库。

使用远程机器的libpq在PostgreSQL中插入二进制大对象(BLOB)

你能给出一个使用libpq从远程机器在PostgreSQL数据库中插入二进制数据的例子。 我的第二个问题是:是否有任何其他API比使用C ++的libpq更有效。 谢谢

在postgresql中创建扩展测试

我想在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.-一旦安装了postgresql,我不知道在哪里可以找到文件btree_gist.c ,然后运行上面的命令。 如果你问我:’为什么不下载源代码呢?’ 好吧,因为当我这样做时,我收到此错误消息: #include “postgres.h” […]

使用libpq-fe.h连接到C中的Postgres数据库时出错

嘿我正在尝试使用postgres连接到数据库 #include #include #include int main(int argc, char* argv[]) { //Start connection PGconn* connection = PQconnectdb(“host=webcourse.cs.nuim.ie dbname=cs621 sslmode=require user=ggales password=1234”); if (PQstatus(connection) ==CONNECTION_BAD) { printf(“Connection error\n”); PQfinish(connection); return -1; //Execution of the program will stop here } printf(“Connection ok\n”); //End connection PQfinish(connection); printf(“Disconnected\n”); return 0; } 我一直得到这个编译错误: main.c: In function ‘main’: main.c:9:35: warning: missing terminating […]

错误:语言c的权限被拒绝

使用非超级用户创建这样的函数时,我收到以下错误: ERROR: permission denied for language c SQL state: 42501 创建的function是: CREATE OR REPLACE FUNCTION dblink_connect (text) RETURNS text AS ‘$libdir/dblink’,’dblink_connect’ LANGUAGE C STRICT; 但是,如果我想向非超级用户授予语言C的许可,我会收到以下错误: postgres=# grant usage on language c to caixa; ERROR: language “c” is not trusted postgres=# grant usage on language c to caixa; ERROR: language “c” is not trusted 那意味着,非超级用户无法使用C语言创建function? 或者还有什么我做错了吗?

为什么PostgreSQL数组在C中的访问速度比在PL / pgSQL中快得多?

我有一个表模式,其中包含一个int数组列,以及一个自定义聚合函数,它对数组内容求和。 换句话说,给出以下内容: CREATE TABLE foo (stuff INT[]); INSERT INTO foo VALUES ({ 1, 2, 3 }); INSERT INTO foo VALUES ({ 4, 5, 6 }); 我需要一个返回{ 5, 7, 9 }的“sum”函数。 正确运行的PL / pgSQL版本如下: CREATE OR REPLACE FUNCTION array_add(array1 int[], array2 int[]) RETURNS int[] AS $$ DECLARE result int[] := ARRAY[]::integer[]; l int; BEGIN — — […]