如何解决“ERROR: <module/extension> must be loaded via shared_preload_libraries”错误?

上次更新时间:2020 年 6 月 17 日

我具有 Amazon Relational Database Service (Amazon RDS) for PostgreSQL 数据库实例。我收到错误“ERROR: <module/extension> must be loaded via shared_preload_libraries”。如何排查并解决此错误?

简短描述

使用 Amazon RDS for PostgreSQL 时,您可以将共享库预加载到服务器,以便加载其他功能或实现性能好处。但是,在尝试使用模块/扩展时,您可能会收到以下错误:

“ERROR: <module/extension> must be loaded via shared_preload_libraries”

例如,在查询 pg_stat_statements 时,您可能收到以下错误:

postgres=> SELECT * FROM pg_stat_statements;
ERROR:  relation "pg_stat_statements" does not exist
postgres=> CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
CREATE EXTENSION
 
postgres=> SELECT * FROM pg_stat_statements;
ERROR:  pg_stat_statements must be loaded via shared_preload_libraries

为了解决此错误和查询 pg_stat_statements,请将 shared_preload_libraries 的值设置为与您的数据库实例关联的自定义参数组中的 pg_stat_statements

您可以在 RDS PostgreSQL 上使用以下模块/扩展,方法是修改自定义参数组中的参数 shared_preload_libraries 的值:

auto_explain orafce pgaudit pglogical pg_hint_plan pg_prewarm pg_similarity pg_stat_statements pg_transport plprofiler

注意:您可以修改自定义参数组中的参数值。您无法修改默认数据库参数组中的参数值。如果您对自定义参数组中的参数进行更改,则您的更改会应用于与该参数组关联的所有数据库实例。

解决方法

创建自定义参数组

注意:如果您已具有自定义参数组,请跳到下一步。

    登录到 Amazon RDS 控制台。
    在导航窗格中,选择参数组。 选择创建参数组。 在参数组系列列表中,选择数据库参数组系列。 在组名称框中,输入新的数据库参数组的名称。 在描述框中,为新的数据库参数组输入描述。 选择创建

修改自定义参数组中的参数

    登录到 Amazon RDS 控制台。
    在导航窗格中,选择参数组。 在列表中,选择要修改的参数组。 对于参数组操作,选择编辑。 更改参数 shared_preload_libraries 的值。 选择保存更改

注意:shared_preload_libraries 参数是静态参数。在您更改静态参数并保存数据库参数组时,参数更改将在您手动重启数据库实例后生效。

将参数组关联到您的数据库实例

注意:如果您的自定义参数组已关联到您的数据库实例,请跳到下一步。

修改您的数据库实例以将自定义参数组关联到您的数据库实例。

重启数据库实例

在您更改静态参数并保存数据库参数组时,参数更改将在您手动重启数据库实例后生效。

在更改与数据库实例关联的数据库参数组时,您必须在数据库实例使用新的数据库参数组之前手动重启数据库实例。

透过使用 Amazon RDS 控制台或显式调用 RebootDBInstance API 操作来重启您的数据库实例(在数据库实例处于多可用区部署中时不进行故障转移)。