# 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-XL9.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”,进行服务配置;

提示:

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

  2. 数据源名称用户可自定义。在配置地图文档(*.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. 初始化成功后,用户即可基于该数据库进行数据转换、创建等数据管理相关操作。