基于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
的具体使用方法。