RDSでPostgresのインスタンスを使用していて、実行しようとしています。
=> create language plperlu;
しかし私は得る:
ERROR: must be superuser to create procedural language "plperlu"
実行した場合:
=> grant rds_superuser to treex;
NOTICE: role "treex" is already a member of role "rds_superuser"
GRANT ROLE
RDSでPostgresのPerl拡張を実際に使用することは可能ですか、それとも唯一の解決策はPostgresおよびPerlモジュールがプリインストールされたDockerインスタンスを作成することですか?
RDSではこれを行うことはできません。 rds_superuser
は真のスーパーユーザーではなく、C言語拡張機能をロードできません。
RDSにはすでにいくつかの言語がインストールされていますが、まだ存在していないパッケージをインストールすることはできません。
PostgreSQL 9.6の拡張機能に関するRDSドキュメント から:
次の表に、PostgreSQLバージョン9.6.xのPostgreSQL拡張機能を示します。これらは現在Amazon RDS上のPostgreSQLでサポートされています 「N/A」は、そのPostgreSQLバージョンでは拡張機能が利用できないことを示します。 [...]
[...] plls 1.5.3 plperl 1.0 plpgsql [...] postgres_fdw [...]
PLPERLuはリストにありません。
untrustedバージョンのPerlをインストールできません。これはシステムを危険にさらす可能性があります。
(未テスト)回避策
したがって、この機能が本当に必要な場合は、PostgreSQLを自分の(仮想)マシン(またはDocker)にインストールし、そこで使用する必要があります。
PLPERLuは、PostgreSQL FDW
とトリガーを使用して、RDSからfromRDSから利益を得ることができます。
postgres_fdw
を使用して2つをリンクします。INSERT or UPDATE TRIGGER
を含むテーブルを1つ作成できます。このテーブルは構造(parameter1, parameter2, ... , parameterN, result)
を持つことができ、INSERT or UPDATE
のときにトリガーが起動され、列new.result
が生成されます。ノート:
postgres_fdw
または他のデータラッパーにどの接続制限を設定するのかわかりません。許可される接続IPアドレスはmayに制限されるため、RDSがauxデータベースにアクセスできなくなる可能性があります。