PostgreSQL 12 和 PostGIS 3.0.1:错误:无法访问文件“$libdirpostgis-3”:Linux 上没有这样的文件或目录

作者:编程家 分类: postgresql 时间:2025-07-18

使用PostgreSQL 12和PostGIS 3.0.1时遇到错误:“无法访问文件“$libdir/postgis-3”:Linux上没有这样的文件或目录。”这个错误通常是由于PostGIS插件未正确安装或配置而引起的。在本文中,我们将探讨如何解决这个问题,并提供一些案例代码来帮助读者更好地理解。

什么是PostGIS?

PostGIS是一个用于处理地理空间数据的开源扩展,它为PostgreSQL数据库添加了对地理空间对象的支持。它提供了许多功能,包括空间索引、空间查询和分析等。PostGIS的最新版本是3.0.1,与PostgreSQL 12兼容。

错误原因

当出现错误“无法访问文件“$libdir/postgis-3”:Linux上没有这样的文件或目录”时,通常表示PostGIS插件未正确安装或未正确配置。

解决方法

要解决这个问题,我们需要执行以下步骤:

步骤1:确认PostGIS插件已正确安装

首先,我们需要确认PostGIS插件已正确安装。可以通过以下命令检查PostGIS插件是否存在:

SELECT name FROM pg_available_extensions WHERE name LIKE 'postgis%';

如果返回结果中包含类似“postgis”或“postgis_topology”等插件名称,则表示插件已安装。

步骤2:确认PostGIS插件已在数据库中启用

然后,我们需要确认PostGIS插件已在要使用的数据库中启用。可以使用以下命令来检查插件的状态:

SELECT * FROM pg_extension WHERE extname LIKE 'postgis%';

如果结果中的"extstate"列显示为"e",则表示插件已启用。

步骤3:正确配置PostGIS插件路径

如果插件已正确安装和启用,但仍然遇到错误,那么可能是由于PostGIS插件路径未正确配置所致。在PostgreSQL的配置文件中,有一个配置项“shared_preload_libraries”,用于指定要预加载的共享库。

请打开PostgreSQL的配置文件(通常位于/etc/postgresql/12/main/postgresql.conf),并找到“shared_preload_libraries”配置项。确保该配置项包含PostGIS插件路径,例如:

shared_preload_libraries = 'postgis-3'

保存配置文件并重新启动PostgreSQL服务。

案例代码

以下是一个简单的案例代码,演示如何在PostgreSQL 12和PostGIS 3.0.1中创建和查询地理空间对象:

-- 创建一个新的数据库

CREATE DATABASE spatial_db;

-- 连接到新数据库

\c spatial_db

-- 启用PostGIS插件

CREATE EXTENSION postgis;

-- 创建一个包含地理空间数据的表

CREATE TABLE spatial_table (

id SERIAL PRIMARY KEY,

name VARCHAR(50),

geom GEOMETRY(Point, 4326)

);

-- 插入一些示例数据

INSERT INTO spatial_table (name, geom) VALUES

('Point A', ST_SetSRID(ST_MakePoint(-122.123456, 37.654321), 4326)),

('Point B', ST_SetSRID(ST_MakePoint(-122.987654, 38.246813), 4326));

-- 查询表中的数据

SELECT * FROM spatial_table;

以上代码创建了一个名为"spatial_db"的新数据库,并在其中创建了一个名为"spatial_table"的表,该表包含一个名为"geom"的地理空间列。然后,我们插入了两个示例数据并查询了表中的所有数据。

通过正确安装、启用和配置PostGIS插件,我们可以在PostgreSQL 12和PostGIS 3.0.1中成功处理地理空间数据。当遇到错误“无法访问文件“$libdir/postgis-3”:Linux上没有这样的文件或目录”时,我们可以按照上述步骤逐一排查并解决问题。希望本文对于使用PostGIS的读者能够提供帮助,并使他们能够顺利进行地理空间数据处理。