# PostgreSQL数据库
PostgreSQL数据库是目前功能最强大的开源数据库之一,支持丰富的数据类型(如JSON和JSONB类型、数组类型)和自定义类型。PostgreSQL数据库是开源数据库,遵循BSD协议,它提供丰富的接口,具有较强的可扩展性,在使用和二次开发上基本没有限制。MapGIS平台可直接连接PostgreSQL数据源并创建数据库,下图为MapGIS使用PostgreSQL数据库的流程图:
目前MapGIS可支持的PostgreSQL数据库版本如下所示:
数据库 | 版本 | MapGIS支持情况 |
---|---|---|
PostgreSQL | 9.4及以下版本 | × |
9.5 | √ | |
9.6 | √ | |
10 | √ | |
11 | √ | |
12 | √ | |
13 | √ | |
14 | √ | |
15 | √ | |
PostgreSQL-XL | 9.5 | √ |
9.6 | √ | |
10 | √ |
PostgreSQL数据库包括windows和Linux版本,不同版本安装服务器端及配置数据库方法不同。其中windows上PostgreSQL数据库配置方法可参考"MapGIS Desktop的PostgreSQL数据库 (opens new window)"。
PostgreSQL数据库的安装步骤可参考官方操作手册,这里就不做详细说明。下面会对配置PostgreSQL数据库及配置PostgreSQL地理数据库的操作步骤进行详细说明。
提示:
MapGIS DataStore提供了一键式PostgreSQL数据库创建能力,当用户通过MapGIS DataStore"创建PostgreSQL (opens new window)"地理数据库后,用户可直接配置数据源并使用PostgreSQL地理数据库,无需再进行其他操作。
# 相关主题
# 配置数据库信息
MapGIS使用PostgreSQL数据库时,要求数据库服务器已安装postgis和libxml2扩展,且网络可用。
# 检查postgis扩展
PostgreSQL数据库及其对应的postgis扩展版本如下表所示:
PostgreSQL版本 | Postgis2.5 EOL | Postgis 3.0 | Postgis 3.1 | Postgis 3.2 | Postgis 3.3 | Postgis 3.4 | Postgis 3.5 |
---|---|---|---|---|---|---|---|
15 | × | × | × | √ | √ | √ | √ |
14 | × | × | √ | √ | √ | √ | √ |
13 | × | √ | √ | √ | √ | √ | √ |
12 | √ | √ | √ | √ | √ | √ | √ |
11 | √ | √ | √ | √ | √ | × | × |
1. 切换到postgres用户,登录默认的pstgres数据库。
#su - postgres
#psql -U postgres
2. 通过如下命令,查询是否已安装postgis和libxml2扩展。
select * from pg_available_extensions where name = 'postgis' or name = 'xml2';
# 检查网络配置
为了保证其他客户机可正常访问PostgreSQL数据库,需要配置PostgreSQL数据库的网络信息。
1. 修改"/opt/pgsql/postgresql/data/postgresql.conf"。参数“listen_addresses”表示监听的IP地址,默认是在localhost处监听,也就是127.0.0.1的ip地址上监听,只接受来自本机localhost的连接请求,这会让远程的主机无法登陆这台数据库,建议将注释#去掉,把这个地址改为*。
#cd /usr/pgsql-12/data/
#vim postgresql.conf
2. 修改"/opt/pgsql/postgresql/data/pg_hba.conf",配置对数据库的访问权限。
#cd /usr/pgsql-12/data/
#vim pg_hba.conf
①如果要使所有可提供有效密码的用户都能使用 md5 连接从以 10.2.12 开头的地址连接到名为 test 的数据库,请向 pg_hba.conf 文件中添加如下内容:
host test all 10.2.12.0/24 md5
②如果要使所有可提供有效密码的用户均能从以 100 开头的地址连接到 PostgreSQL 实例中的任何数据库,则需要向 pg_hba.conf 文件添加如下内容:
host all all 100.0.0.0/8 md5
③如果要使所有可提供有效密码的用户均能从任意IP地址连接到 PostgreSQL 实例中的任何数据库,则需要向 pg_hba.conf 文件添加如下内容:
host all all 0.0.0.0/0 md5
# 新建数据库
# 新建数据库
# 功能说明
PostgreSQL数据库安装并初始化后,默认安装一个名为postgres的数据库。用户在业务应用中时,建议再新建数据库及用户。
# 操作说明
1. 切换到postgres用户,登录默认的pstgres数据库。
#su - postgres
#psql -U postgres
2. 创建一个新的用户。如下用户及密码均为test,用户可自定义。
CREATE USER test PASSWORD 'test';
提示:
MapGIS要求数据库及用户名必须全部小写,不可使用大写。
3. 创建一个新的数据库并属于新建的用户。如下数据库为testdb,用户可自定义。
create database testdb owner test;
# 启用postgis扩展
1. 切换到postgres用户,利用管理员postgres登录到刚才新建的testdb数据库。
#su - postgres
#psql -U postgres -d testdb
2. 启用postgis扩展。
create extension postgis;
3. 创建成功后,可通过如下命令查看postgis扩展是否正确加载。
select * from pg_extension;
# 安装启用mapgis3d_pg扩展
# 功能说明
mapgis3d_pg扩展主要用于支持MapGIS三维面体数据使用。MapGIS 10.7.0.10及之前版本,必须执行此步骤才能正常使用MapGIS三维面/体数据。自MapGIS 10.7.2.10开始,初始化PostgreSQL地理数据库后,该数据库即可正常使用MapGIS三维面/体,用户无需再手动安装mapgis3d_pg扩展。
# 操作说明
mapgis3d_pg扩展文件在"MapGIS安装目录\Program\Support\SDE\PostgreSQL"文件夹中,用户可根据数据库及操作系统版本,选择对应版本的扩展文件。如Linux x86_64的客户机上PostgreSQL 12对应的扩展文件在"MapGIS安装目录\Program\Support\SDE\PostgreSQL\12\Linux\x86_64"文件夹中,包括如下几个文件:
1. 将扩展文件拷贝到Linux机器中。
2. 将mapgis3d_pg--1.0.sql、mapgis3d_pg--1.0--1.1.sql、mapgis3d_pg--1.1.sql、mapgis3d_pg.control四个文件拷贝到"PostgreSQL安装目录/share/extension"中,,并赋予给postgres用户,设置可执行权限。其中,/usr/pgsql-12/为PostgreSQL安装目录。
#cp mapgis3d_pg--* mapgis3d_pg.control /usr/pgsql-12/share/extension/
#chown postgres:postgres mapgis3d_*
#chmod 755 -R mapgis3d_*
3. 将mapgis3d_pg.so文件拷贝到"PostgreSQL安装目录/bin"中,,并赋予给postgres用户,设置可执行权限。
#cp mapgis3d_pg.so /usr/pgsql-12/bin/
#chown postgres:postgres mapgis3d_pg.so
#chmod 755 -R mapgis3d_pg.so
4. 切换到postgres用户,登录到新建的testdb数据库,启用mapgis3d_pg扩展。
#su - postgres
#psql -U postgres -d testdb
create extension mapgis3d_pg;
# 配置PostgreSQL数据源
# 功能说明
在服务机上安装配置PostgreSQL客户端后,客户机只要安装了MapGIS,就可以在MapGIS中配置PostgreSQL数据源,用来管理PostgreSQL数据库。
# 操作说明
1. 在MapGIS GDBCatalog面板,点击"添加数据源"功能,弹出如下所示对话框:
2. 选择“PostgreSQL数据源”,手动输入“[ip]:[端口]/[数据库名]”,如“192.168.11.106:5432/testdb”,进行服务配置;
提示:
一般情况下,PostgreSQL数据库默认端口为5432,通过MapGIS DataStore配置的PostgreSQL数据库默认端口为30001.
数据源名称用户可自定义。在配置地图文档(*.mapx)时,记录数据的URL信息时包含了数据源名称。因此多台客户机间使用同一套地图文档(*.mapx)时,应保证数据源名称是一致的。
3. "确定"后,在MapGIS GDBCatalog中可添加该PostgreSQL数据源节点信息:
# 创建PostgreSQL地理数据库
# 功能说明
在MapGIS中配置PostgreSQL数据源后,需初始化PostgreSQL地理数据库。初始化成功后,用户即可基于该地理数据库进行数据转换、创建等数据管理相关操作。
# 操作说明
1. 在MapGIS GDBCatalog中,连接PostgreSQL数据源,需输入用户名密码信息;
2. 连接成功后,在PostgreSQL数据源节点,右键"创建地理数据库",即可初始化PostgreSQL地理数据库。
- 【完成后显示创建日志】:勾选时,可显示创建日志信息;
- 【支持Z值】:勾选时,初始化的PostgreSQL地理数据库中数据版本为8.3,其中点/线/区简单要素类可支持z值;
- 【支持解析弧段】:勾选时,初始化的PostgreSQL地理数据库中数据版本为8.4,其中线/区简单要素类可支持弧段。
- 【类名和表名一致】:勾选时,PostgreSQL数据库中存储GIS数据类名和表名是一致的。由于PostgreSQL数据库中表名存在长度、特殊字符的限制,MapGIS默认PostgreSQL数据库中数据存储名称和实际名称是通过"mpdbmaster"->"mpdb_item"表存储对应关系。
3. 初始化成功后,用户即可基于该数据库进行数据转换、创建等数据管理相关操作。