注:使用postgresql数据库会用到PostGIS 扩展。
一、安装PostGIS 扩展
在 PostgreSQL 中遇到错误 “type geography does not exist” 通常意味着你的 PostgreSQL 数据库还没有安装 PostGIS 扩展,或者 PostGIS 扩展没有被正确地安装在你的数据库中。geography
类型是 PostGIS 提供的,用于存储和处理地理空间数据,特别是考虑到地球曲率的地理数据。
要解决这个问题,请按照以下步骤操作:
1、确认 PostGIS 是否已安装:
你可以通过查询 PostgreSQL 的扩展列表来确认 PostGIS 是否已经安装在你的数据库中。运行以下 SQL 命令:
SELECT * FROM pg_extension; |
如果列表中没有 PostGIS,那么你需要安装它。
2、安装 PostGIS:
如果你还没有安装 PostGIS,你可以通过 PostgreSQL 的包管理器(如 apt-get、yum、brew 等,取决于你的操作系统)或者通过 PostgreSQL 的 SQL 命令来安装它。但是,通常建议使用包管理器来安装,因为它会处理所有依赖项。
如果你正在使用 PostgreSQL 的 SQL 命令来安装扩展(这通常是在你已经有了 PostgreSQL 和相应的权限之后),你可以运行以下命令(但请注意,这通常不是安装 PostGIS 扩展的推荐方式,因为它假设你的系统上已经有了 PostGIS 的二进制文件):
CREATE EXTENSION IF NOT EXISTS postgis; |
但是,如果 PostGIS 的二进制文件没有在你的 PostgreSQL 的库路径中,这个命令将会失败。
3、使用包管理器安装 PostGIS:
根据你的操作系统,你可以使用相应的包管理器来安装 PostGIS。
需要根据postgresql的版本安装对应的postgis
psql --version #查看postgresql版本 为postgresql 16.* |
例如,在 Ubuntu 上,你可以使用 apt-get
:
sudo apt-get update | |
sudo apt-get install postgresql-16-postgis-3 # 注意版本号可能不同 |
在 CentOS 上,你可以使用 yum
:
sudo yum install postgis30_12 # 注意版本号可能不同 |
在 macOS 上,如果你使用 Homebrew,你可以安装 PostgreSQL 和 PostGIS:
brew install postgis |
但是,对于 macOS 上的 Homebrew,你可能还需要在 PostgreSQL 数据库中手动启用 PostGIS 扩展。
4、先重启数据库,然后在数据库中启用 PostGIS:
重启数据库
systemctl restart postgresql |
如果你已经通过包管理器安装了 PostGIS,但还没有在你的数据库中启用它,你需要登录到你的 PostgreSQL 数据库,并运行以下 SQL 命令来创建扩展:
CREATE EXTENSION IF NOT EXISTS postgis; |
5、使用 SQL 查询
在 PostgreSQL 的命令行工具 psql
中,你可以通过查询数据库来确定 PostGIS 是否已经安装并可用。执行以下 SQL 命令:
SELECT PostGIS_Full_Version(); |
如果 PostGIS 已安装,这条命令将返回 PostGIS 的完整版本信息。如果返回错误或没有任何输出,则可能表示 PostGIS 没有安装或尚未在数据库中启用。