1.问题说明
项目要做跟GIS相关的应用,导入数据时出现以下报错:
[ERR] ERROR: relation "geometry_columns" does not exist
原因是:PostgreSQL数据库没有PostGIS扩展
。我们当前的项目为了部署简便,PG数据库使用的是Docker部署,这个时候安装插件就跟非Docker的有一些不同了。
2.(旧的)安装流程
# 进入容器 docker exec -it CONTAINER ID /bin/bash
2.1 更新apt-get
以下操作为root
用户执行:
# 1.更新 apt-get 否则安装 sudo\vim 时可能会报错 E: Unable to locate package sudo apt-get update # 2.安装 sudo 和 vim apt-get install sudo apt-get install vim
为什么要安装sudo
和vim
:
- 给PostgreSQL安装插件要使用postgre用户进行安装,这里就用到了sudo命令。
- postgre用户想要使用sudo命令要对
/etc/sudoers
进行修改,所以用到了vim。
2.2 修改sudoers
不修改的话报错:postgres is not in the sudoers file. This incident will be reported.
# 3.修改 sudoers vim /etc/sudoers # 添加内容 无需密码拥有root权限 postgres ALL=(ALL:ALL) NOPASSWD:ALL
2.3 安装PostGIS
# 4.切换到 postgres 用户 su postgres # 5.安装 PostGIS (根据安装的PG版本进行安装) sudo apt-get install postgresql-12-postgis-3 postgresql-12-postgis-3-dbgsym postgresql-12-postgis-3-scripts
2.4 创建扩展并验证
# 6.应用扩展 CREATE EXTENSION postgis; # 7.验证 SELECT postgis_full_version(); # 结果 POSTGIS="3.3.1 3786b21" [EXTENSION] PGSQL="120" GEOS="3.9.0-CAPI-1.16.2" PROJ="7.2.1" LIBXML="2.9.10" LIBJSON="0.15" LIBPROTOBUF="1.3.3" WAGYU="0.5.0 (Internal)"
3.(新的)安装流程
# 进入容器 docker exec -it CONTAINER ID /bin/bash
以下操作为root
用户执行:
# 1.更新 apt-get apt-get update # 未更新直接安装会报错 Reading package lists... Done Building dependency tree... Done Reading state information... Done E: Unable to locate package postgresql-12-postgis-3 E: Unable to locate package postgresql-12-postgis-3-dbgsym E: Unable to locate package postgresql-12-postgis-3-scripts # 2.安装PostGIS apt-get install postgresql-12-postgis-3 postgresql-12-postgis-3-dbgsym postgresql-12-postgis-3-scripts
其他流程不变,新的
安装流程,没有切换到postgres
用户而是使用root
用户进行的安装。
更新列表:
- 20221222 更新新的安装流程