基于postgres的图数据库agensgraph(上)

agensgraph是直接在postgres的源代码层面实现的图数据库引擎,相当于直接往postgres加入了处理图数据的能力。本文介绍agensgraph在macos下的安装和基本使用方法。在macos上需要build这个项目的源代码,项目的地址位于这里:

好在项目的页面上介绍了build方法,关于macos的部分可以作为参考阅读一下。这篇文章记录具体安装过程。首先把源代码clone下来:

$ git clone https://github.com/bitnine-oss/agensgraph.git

看下源代码内容:

深挖一下src目录里的内容:

可以看到agensgraph使用的是完整的postgres的源代码,然后往里面加入了agensgraph自身的扩展代码。我们可以大概看看agensgraph里面的一些跟GRAPH有关的代码:

$ grep -r 'GRAPH' * | more
src/pl/plpgsql/src/pl_exec.c:           case SPI_ERROR_GRAPHWRITE:
src/pl/plperl/ppport.h:isGRAPH|5.006000||p
src/pl/plperl/ppport.h:#ifndef isGRAPH
src/pl/plperl/ppport.h:#  define isGRAPH(c)                     isgraph(c)
src/pl/plperl/ppport.h:#ifndef isGRAPH
src/pl/plperl/ppport.h:#  define isGRAPH(c)                     (isALNUM(c) || isPUNCT(c))
src/test/regress/case_sensitive_ident.diff:@@ -74,7 +74,7 @@ SELECT g.* FROM GRAPHID_TBL g WHERE g.f1 <= '12345.123'::graphid;
src/test/regress/case_sensitive_ident.diff:-CREATE INDEX GRAPHID_TBL_IDX ON GRAPHID_TBL USING GIN (f1);
src/test/regress/case_sensitive_ident.diff:+CREATE INDEX GRAPHID_TBL_IDX ON GRAPHID_TBL USING gin (f1);
src/test/regress/case_sensitive_ident.diff: SELECT g.* FROM GRAPHID_TBL g WHERE g.f1 =  '12345.123'::graphid;
src/test/regress/case_sensitive_ident.diff:@@ -24,7 +24,7 @@ SELECT g.* FROM GRAPHID_TBL g WHERE g.f1 <= '12345.123'::graphid;
src/test/regress/case_sensitive_ident.diff:-CREATE INDEX GRAPHID_TBL_IDX ON GRAPHID_TBL USING GIN (f1);
src/test/regress/case_sensitive_ident.diff:+CREATE INDEX GRAPHID_TBL_IDX ON GRAPHID_TBL USING gin (f1);
src/test/regress/case_sensitive_ident.diff: SELECT g.* FROM GRAPHID_TBL g WHERE g.f1 =  '12345.123'::graphid;
src/test/regress/expected/sql_restriction.out:CREATE GRAPH g;
src/test/regress/expected/sql_restriction.out:HINT:  Use RENAME GRAPH instead
src/test/regress/expected/sql_restriction.out:HINT:  Use ALTER GRAPH instead
src/test/regress/expected/sql_restriction.out:CREATE GRAPH t;
src/test/regress/expected/sql_restriction.out:DROP GRAPH t CASCADE;
src/test/regress/expected/sql_restriction.out:DROP GRAPH g CASCADE;

可以看到,agensgraph是直接在postgres的code base上面实现了graph引擎。大概看了看源代码以后,接下来就可以编译这个项目了。编译项目需要你的电脑上安装了xcode,安装命令如下:

$ xcode-select --install

这套工具是macos的编译工具。安装好编译工具以后,首先是执行项目源代码的配置命令:

$ ./configure

以下是configure的执行过程:

执行完成后,使用make命令编译:

$ make

编译的过程比较长,因为等于是build了整个postgres,外加agensgraph的扩展,所以需要耐心等待。全部编译完成后,状态如下:

此时可以安装编译好的项目了。默认agensgraph是把自己安装在/usr/local/pgsql这个目录里。下面是相关命令:

$ sudo mkdir -p /usr/local/pgsql
$ sudo chown weli /usr/local/pgsql
$ ls -ld /usr/local/pgsql/
drwxr-xr-x  2 weli  wheel  64 Apr  9 15:10 /usr/local/pgsql/

我们创建了/usr/local/pgsql并把它的所有者变为当前用户。此时回到agensgraph的代码目录:

$ pwd
/Users/weli/works/agensgraph

然后执行make install

此时查看/usr/local/pgsql/

可以看到相关的项目文件已经被安装好了。接下来就是剩下的一些配置工作。

agensgraph数据库的配置和初始化

在启动数据库之前,还需要做一些配置和准备工作。首先要配置一下agensgraph的路径:

echo "export PATH=/usr/local/pgsql/bin:\$PATH" >> ~/.bash_profile
echo "export LD_LIBRARY_PATH=/usr/local/pgsql/lib:\$LD_LIBRARY_PATH" >> ~/.bash_profile

上面的命令把agensgraph相关的路径保存进了.bash_profile,这样每次登录bash的时候路径就自动加载了。接下来要建立一个用于保存数据的目录:

$ pwd
/usr/local/pgsql
$ mkdir data
$ ls
bin     data    include lib     share

从上面可以看到data目录被创建了。此时还需要在.bash_profile里面配置一下AGDATA这个变量:

$ echo "export AGDATA=/usr/local/pgsql/data" >> ~/.bash_profile

上面的配置工作就算是完成,接下来是读取一下.bash_profile让配置生效:

$ . ~/.bash_profile

执行完成后,验证下所使用的psql已经是agensgraph提供的:

$ which psql
/usr/local/pgsql/bin/psql

从上面的结果可以看到我们已经在使用agensgraph版本的postgres数据库了。接下来要创建初始的数据库文件,下面是命令:

$ initdb -D /usr/local/pgsql/data/

上面的命令会在/usr/local/pgsql/data/添加数据库文件。命令执行过程如下:

上面的命令会在指定的/usr/local/pgsql/data/里面创建初始的数据库数据:

此外注意一下make install最后给出的命令:

可以看到启动图数据库服务的命令是:

$ ag_ctl -D /usr/local/pgsql/data -l logfile start

记录下这个命令,启动服务的时候会用到。有了以上的准备,接下来就可以启动数据库,并对数据库进行操作了。

上篇就讲这些,下篇会讲一下agensgraph的具体使用方法。