RDS 交叉表:错误:语言 c 的权限被拒绝

Val*_*lva 5 postgresql pivot aws postgresql-9.4 amazon-rds

我们目前在生产数据库中使用 PostgreSQL 9.2,我们希望迁移到使用 PostgreSQL 9.4 的新 RDS 实例。但是,我们需要拥有创建函数的权限,但只有超级用户才能在 RDS 上创建函数,而我的用户无法被授予超级用户权限。

CREATE FUNCTION crosstab50(text, OUT rownumber integer, OUT c1 text,...) 
    RETURNS SETOF record 
    LANGUAGE c 
    STABLE STRICT 
    AS '$libdir/tablefunc', 'crosstab';
Run Code Online (Sandbox Code Playgroud)

但我们在恢复操作期间遇到此错误:

ERROR:  permission denied for language c
Run Code Online (Sandbox Code Playgroud)

Cra*_*ger 6

RDS 不允许您安装任意 C 函数。这是一个受限制的环境。

crosstab是扩展的一部分tablefunc。如果它位于白名单中,您也许可以CREATE EXTENSION tablefunc,但您将无法添加新的变体,即使底层 C 函数已加载并获得批准。