# PostgreSQL数据库

PostgreSQL数据库是目前功能最强大的开源数据库之一,支持丰富的数据类型(如JSON和JSONB类型、数组类型)和自定义类型。PostgreSQL数据库是开源数据库,遵循BSD协议,它提供丰富的接口,具有较强的可扩展性,在使用和二次开发上基本没有限制。MapGIS平台可直接连接PostgreSQL数据源并创建数据库,下图为MapGIS使用PostgreSQL数据库的流程图:

其中,安装PostgreSQL服务器端时会附带安装上PostgreSQL客户端,即pgAdmin。pgAdmin 4是一款为PostgreSQL设计的可靠和全面的数据库设计和管理软件,用户可连接到特定的数据库,创建表和运行各种从简单到复杂的SQL语句,支持的操作系统包括Linux,Windows,Mac OS X。

PostgreSQL服务器端及客户端的安装步骤可参考PostgreSQL数据库官方操作手册,这里就不做详细说明。下面会对配置PostgreSQL数据源及创建PostgreSQL数据库的操作步骤进行详细说明。

# 配置PostgreSQL客户端

# 功能说明

已安装PostgreSQL服务器端及客户端后,需在服务器端所在的计算机上创建配置文件参数信息,连接PostgreSQL服务器上的实例信息。

# 操作说明

# PostgreSQL客户端单机配置(Windows)

1. 配置环境变量。在系统变量path后面追加PostgreSQL安装目录的bin路径,如C:\Program Files\PostgreSQL\9.6\bin(9.6为所装PostgreSQL的版本):

2. 修改配置文件。在PostgreSQL服务器端的安装目录下找到data文件夹(默认路径为C:\Program Files\PostgreSQL\9.6\data),其中postgresql.conf文件需将listen_addresses = 'localhost'修改为listen_addresses = '*'。

为了保证其他客户机可以连接数据库服务器,需要检查数据库服务器是否允许其他客户机连接服务器,如果不允许其他客户机连接则需要修改pg_hba.conf文件。

提示:

修改pg_hba.conf文件之前建议先创建一份副本作为备份。

添加连接的客户端计算机的IP地址和用于连接的客户端身份验证方法如下:

一、配置数据库群集以接受具有IPV4地址的计算机的连接

(1)为使所有可提供有效密码的用户都能使用md5连接从以10.2.12开头的地址连接到名为habitat的数据库,请向pg_hba.conf文件中添加以下行:

host   habitat   all   10.2.12.0/24   md5

(2)如果要使所有可提供有效密码的用户均能从以100开头的地址连接到PostgreSQL实例中的任何数据库,则需要向pg_hba.conf文件添加如下面的行内容类似的行:

host   all   all   100.0.0.0/8   md5

(3)如果要允许所有IPV4协议的客户机连接到PostgreSQL实例中的任何数据库:

host   all   all   0.0.0.0/0   md5

二、配置数据库群集以接受具有IPV6地址的计算机的连接

(1)如果要允许某个IPV6地址能连接到PostgreSQL实例中的任何数据库,则需要向pg_hba.conf文件添加与下面的行:

host   all   all   fe60::61f9:1253:c522:9b92%10/128   md5

(2)要允许所有具有以fe60开始的地址的计算机进行连接,应向pg_hba.conf文件添加以下行:

host   all   all   fe60::0000:0000:0000:0000%10/8   md5

如果您的PostgreSQL数据库集群安装在具有IPV6地址的计算机上,而您想要使具有IPV4地址的计算机与其连接,则需要在pg_hba.conf文件中取消以下行的注释:

保存您对文件作出的更改,然后关闭文件。

3. PostgreSQL客户端创建连接。打开pgAdmin 4客户端,用户需先连接PostgreSQL服务器,在Servers服务器组下创建服务器,输入ip地址、端口、数据库、用户名和密码,如下图所示:

host   all   all   ::1/128   md5

提示:

用户也可以在pgAdmin新建数据库和用户名,以满足需要。

4. 创建PostGIS扩展。PostGIS是对PostgreSQL数据库的一种空间数据拓展,通过PostGIS可以使PostgreSQL数据库支持地理要素的存储,以及相应的SQL空间查询。

(一)安装PostGIS扩展

安装完PostgreSQL服务器端后,用户可以在自带的Stack Builder中选择对应版本的PostGIS进行下载,也可以自行在官网进行下载。

(二)创建PostGIS扩展

PostgreSQL服务器连接成功后,在目的数据库处右键点击“查询工具”,在查询编辑器输入如下所示的SQL语句,并点击“运行”:

create extension postgis;

当消息提示“CREATE EXTENSION”时即创建成功。

5. 创建mapgis3d_pg扩展。mapgis3d_pg扩展主要用于支持MapGIS三维面体数据使用。创建mapgis3d_pg扩展之前,必须先创建postgis扩展。

(一)安装mapgis3d_pg扩展

mapgis3d_pg扩展安装包路径:MapGIS安装目录\Program\Support\SDE\PostgreSQL,目前区分PostGreSQL10和11版本,里面又具体细分windows和linux版本。请根据PostgreSQL或PostgreSQL XL服务器的版本选择相应的扩展安装。

图1 扩展包路径

图2 Windows x86版本

将安装包mapgis3d-pg-extension.exe拷贝到PostgreSQL数据库所在的Windows服务器上,任意路径均可。

拷贝完成后双击exe开始安装,安装完成后:

1)“PostgreSQL数据库安装目录/share/extension”路径下多了以下几个文件:

mapgis3d_pg--1.0.sql

mapgis3d_pg--1.0--1.1.sql

mapgis3d_pg--1.1.sql

mapgis3d_pg.control

2)“PostgreSQL数据库安装目录/lib”路径下多了一个文件:mapgis3d_pg.dll。

(二)创建mapgis3d_pg扩展

PostgreSQL服务器连接成功后,在目的数据库处右键点击“查询工具”,在查询编辑器输入如下所示的SQL语句,并点击“运行”:

create extension mapgis3d_pg;

当消息提示“CREATE EXTENSION”时即创建成功。

6. 检查是否成功安装postgis扩展和mapgis3d_pg扩展。在查询编辑器输入如下所示的SQL语句,并点击“运行”:

select * from pg_extension;

如上图“数据输出”窗口出现postgis和mapgis3d_pg的信息,证明扩展安装成功。

# PostgreSQL客户端单机配置(Linux)

1. 修改配置文件。在PostgreSQL服务器端的安装目录下找到data文件夹(默认路径为/var/lib/pgsql/10/data),其中postgresql.conf文件需将listen_addresses = 'localhost'修改为listen_addresses = '*'。

为了保证其他客户机可以连接数据库服务器,需要检查数据库服务器是否允许其他客户机连接服务器,如果不允许其他客户机连接则需要修改pg_hba.conf文件。

提示:

修改pg_hba.conf文件之前建议先创建一份副本作为备份。

如果PostgreSQL postmaster当前正在运行,则需要使用pg_ctl stop命令将其停止。

使用文本编辑器打开pg_hba.conf文件,添加连接的客户端计算机的IP地址和用于连接的客户端身份验证方法与上文“PostgreSQL客户端配置(Windows)”章节一致,可直接参考。

修改完毕后,保存并关闭pg_hba.conf文件。

使用pg_ctl启动(或重新启动)PostgreSQL postmaster。

2. PostgreSQL客户端创建连接。打开pgAdmin 4客户端,用户需先连接PostgreSQL服务器,在Servers服务器组下创建服务器,输入ip地址、端口、数据库、用户名和密码,点击“保存”。

3. 安装PostGIS扩展。关于Linux下PostGIS扩展的安装可参考PostgreSQL官方操作手册。

4. 安装mapgis3d_pg扩展。以下将对mapgis3d_pg扩展的安装进行详细说明:

(1)使用PostgreSQL数据库的安装用户将安装包mapgis3d_pg_extension.bin拷贝到PostgreSQL数据库所在的Linux服务器上并设置成可执行权限,任意路径都行。

提示:

确认服务器的PostgreSQL数据库版本,拷贝相对应的bin包。

(2)PATH环境变量追加PostgreSQL安装目录。设置PostgreSQL数据库的安装目录的bin文件夹路径到PATH变量。假设/opt/MapGisDataStore/sources/postgisXL/pgxl为PostgreSQL数据库的安装目录,则执行:

#export PG_HOME=/opt/MapGisDataStore/sources/postgisXL/pgxl
#export PATH=$PATH:$PG_HOME/bin

提示:

该步骤很重要,设置不正确会导致下一步安装后的文件位置不对。

(3)安装bin包。执行安装命令:

#./mapgis3d_pg_extension.bin

(4)安装结果

1)“PostgreSQL数据库安装目录/share/extension”路径下多了以下几个文件:

mapgis3d_pg--1.0.sql

mapgis3d_pg--1.0--1.1.sql

mapgis3d_pg--1.1.sql

mapgis3d_pg.control

提示:

extension目录不一定都是“PostgreSQL数据库安装目录/share/extension”。

2)“PostgreSQL数据库安装目录/lib”路径下多了一个文件:mapgis3d_pg.so。

5. 创建PostGIS扩展和mapgis3d_pg扩展。在pgAdmin 4创建扩展的操作与前文“PostgreSQL客户端单机配置(Windows)”章节一致,可直接参考。

6. 检查是否成功安装postgis扩展和mapgis3d_pg扩展。在pgAdmin 4创建扩展的操作与前文“PostgreSQL客户端单机配置(Windows)”章节一致,可直接参考。

# PostgreSQL-XL集群配置(Windows/Linux)

将安装包拷贝到每个节点服务器上,然后按单机的方式去操作即可。

# MapGIS DataStore部署PostgreSQL-XL

MapGIS DataStore是一个以分布式方式存储和管理关系型数据、切片型数据、实时型数据以及非结构数据的混合数据库。用户使用MapGIS DataStore可以直接进行部署PostgreSQL-XL,详情可参考《MapGIS DataStore安装配置手册》和《MapGIS DataStore操作手册》。

# 配置PostgreSQL数据源

# 功能说明

在服务机上安装配置PostgreSQL客户端后,客户机只要安装了MapGIS,就可以在MapGIS中配置PostgreSQL数据源,用来管理PostgreSQL数据库。

# 操作说明

1. 在MapGIS GDBCatalog面板,点击"添加数据源"功能,弹出如下所示对话框:

2. 选择“PostgreSQL数据源”,手动输入“[ip]:[端口]/[数据库名]”,如“192.168.81.115:5432/testdb”,进行服务配置;

提示:

一般情况下,PostgreSQL数据库默认端口为5432,通过MapGIS DataStore配置的PostgreSQL数据库默认端口为30001.

3. "确定"后,在MapGIS GDBCatalog中可添加该PostgreSQL数据源节点信息:

# 创建PostgreSQL数据库

# 功能说明

在MapGIS中配置PostgreSQL数据源后,可创建PostgreSQL数据库。

# 操作说明

1. 在MapGIS GDBCatalog中,连接PostgreSQL数据源,需输入用户名密码信息;

2. 连接成功后,在PostgreSQL数据源节点,右键【创建数据库】,即可新建PostgreSQL数据库。