当我们想要对PostgreSQL进行客户端上的操作时,我们需要从远端对数据库进行访问。这个时候PostgreSQL的神器PostgREST就可以出马了。PostgREST是一个能够帮助我们生成一系列用于操作PostgreSQL数据库的RESTful API的服务器。之前我还尝试过直接使用Nginx中的ngx_postgres模块进行数据的操作,但是实际使用下来发现非常的麻烦,并且RESTful style要求每个网址代表一种资源,在网址中不能有动词,只能有名词,而且所用的名词一般和数据库名称相同。然而,我在Nginx的使用中还并没有找到一种可以适配这种样式的方法,关于ngx_postgres这个模块,可以看一看我的这篇博客Nginx以及ngx_postgres安装以及配置 | Lucas的博客 和这一篇使用Java通过Nginx反向代理服务器操作PostgreSQL数据库 | Lucas的博客 ) 。
PostgREST的下载安装也非常的方便,首先我们创建一个文件夹用来放置PostgREST的安装目录。这里我选择在/opt
目录下创建文件夹postgrest
,然后下载压缩包到~/pacakges
,
sudo wget <https://github.com/begriffs/postgrest/releases/download/v0.4.1.0/postgrest-0.4.1.0-ubuntu.tar.xz>
将压缩包解压到postgrest中
cd ~/packages
sudo tar -xvf postgrest-0.4.1.0-ubuntu.tar.xz -C /opt/postgrest
然后进入postgrest目录中,解压后只有一个可执行文件postgrest
,执行解压后的可执行文件。
cd /opt/postgrest
./postgrest
执行之后看到提示说明配置成功
db-uri = "postgres://user:pass@localhost:5432/dbname"
db-schema = "public"
db-anon-role = "postgres"
db-pool = 10
接下来配置配置文件,新建文件default.conf
,配置文件内容
# postgrest.conf
# The standard connection URI format, documented at
# <https://www.postgresql.org/docs/current/static/libpq-connect.html#AEN45347>
db-uri = "postgres://postgres:password@127.0.0.1:5432/dbname"
# The name of which database schema to expose to REST clients
db-schema = "public"
# The database role to use when no client authentication is provided.
# Can (and probably should) differ from user in db-uri
db-anon-role = "postgres"
用设置好的配置文件启动postgrest
cd /opt/postgrest
sudo ./postgrest default.conf
启动之后,就会看到日志直接输出,可以通过Ctrl-C停止程序。我们可以通过调整将日志输出到日志文件,并且后台运行程序,日志文件应该保存在当前用户空间中,否则会出现权限问题。
sudo nohup postgrest default.conf>~/postgrest.log &
启动之后,我们就可以通过PostgREST进行Query或者Insertion了。
虽然PostgREST能够为我们提供强大的RESTful API帮助,但是它并未提供一些安全上的保障和措施。所以,在实际应用中,我们可以搭配强大的Nginx,用Nginx反向代理PostgREST。我们在Nginx的配置文件中加入如下配置:
upstream postgrest {
server localhost:3000;
keepalive 64;
}
server {
...
location /api/ {
default_type application/json;
proxy_hide_header Content-Location;
add_header Content-Location /api/$upstream_http_content_location;
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_pass http://postgrest/;
}
...
}
然后就可以直接通过http://hostname/api/
来对数据库进行操作
参考资料:【PostgREST 基本教程(一)】 PostgREST快速搭建 )
使用教程:官方文档