web-dev-qa-db-ja.com

Amazon RDSで言語をインストールしますか?

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インスタンスを作成することですか?

3
Randomize

RDSではこれを行うことはできません。 rds_superuserは真のスーパーユーザーではなく、C言語拡張機能をロードできません。

4
Craig Ringer

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から利益を得ることができます。

  1. RDSでmain(制約付き)データベースをセットアップします。
  2. aux(制約なし)データベースを自分のボックスでセットアップします...
  3. mainからauxへのpostgres_fdwを使用して2つをリンクします。
  4. FDWを介して関数を直接呼び出すことはできません。ただし、目的の関数呼び出しを実行するINSERT or UPDATE TRIGGERを含むテーブルを1つ作成できます。このテーブルは構造(parameter1, parameter2, ... , parameterN, result)を持つことができ、INSERT or UPDATEのときにトリガーが起動され、列new.resultが生成されます。

ノート:

  1. 私はこれを試したことはありません。
  2. RDSがpostgres_fdwまたは他のデータラッパーにどの接続制限を設定するのかわかりません。許可される接続IPアドレスはmayに制限されるため、RDSがauxデータベースにアクセスできなくなる可能性があります。
1
joanolo