web-dev-qa-db-ja.com

毎回「create extension pgcrypto」を実行する必要がありますか?

ユーザーパスワードをハッシュする関数の1つでcrypt()を使用しました。しかし、翌日PCを起動したときに観察したところ、再起動時に暗号化機能が使用できなくなったため、同じことが失敗しました。関数gen_salt()/crypt()が不明または定義されていないなどのメッセージが表示されました。 create extension pgcrypto;一度、動作し始めました。

これを本番環境で処理するにはどうすればよいですか? dbが再起動されても、このモジュールをdbで永続的に使用できるようにする方法はありますか?

または、dbサーバーを再起動する必要がある場合に備えて、このコマンドを実行するようサーバーマネージャーに指示する必要がありますか?

またはcan暗号化関数を使用する前に毎回拡張を作成するように、関数自体にこのステートメントを記述しますか?

さらに、dbのread-replicaを使用していますが、読み取り権限しかないため、この「拡張の作成」ステートメントの実行は許可されていません。それでは、このような読み取り専用環境でこの暗号化機能を利用できるようにする方法を教えてください。

3
Arjun_TECH

pgcrypto は通常のPostgres拡張です。これを使用するには、データベースごとに1回インストールする必要があります(想定していたようなDBクラスターごとではありません)。インストールは永続的であり、DBが再起動しても存続します。

Ifすべてのnewデータベースを同じDBクラスターにインストールしてプレインストールします。デフォルトのテンプレートデータベースにインストールできますtemplate1接続して通常通りインストールします。 または他のデータベースにインストールし、thatをテンプレートとして使用します:

CREATE DATABASE new_db TEMPLATE my_template;

見る:

失敗する可能性のあるもう1つのこと:search_path。見る:

しかし、それがあなたの問題だった場合、同じ拡張機能をもう一度インストールしようとすると警告が表示されます。

私が考えることができる唯一の他のエキゾチックな説明:あなたのDBは以前の状態に復元された可能性があります。しかし、あなたは確かにそれを知っているでしょうね?

または、誤って別のデータベースに接続しただけですか?あなたが言った「リードレプリカ」?

この暗号化機能をこのような読み取り専用環境で利用できるようにする方法は?

レプリケーションソリューションによってレプリケートされない場合は、手動でインストールする必要があります1回。

5