web-dev-qa-db-fra.com

Dois-je exécuter "create extension pgcrypto" à chaque fois?

J'ai utilisé crypt() dans l'une de mes fonctions pour hacher le mot de passe utilisateur. Mais ce que j'ai observé le lendemain, j'ai démarré mon PC que la même chose a échoué car les fonctions cryptographiques sont devenues indisponibles au redémarrage. Il a montré un message comme les fonctions gen_salt()/crypt() est inconnu ou non défini. J'ai exécuté create extension pgcrypto; une fois et il a commencé à fonctionner.

Comment gérer cela dans un environnement de production? Existe-t-il un moyen de rendre ce module disponible en permanence dans db même si db est redémarré?

Ou dois-je demander au gestionnaire de serveur d'exécuter cette commande au cas où il aurait besoin de redémarrer le serveur db?

Ou peut J'écris cette instruction dans les fonctions elles-mêmes afin de créer l'extension à chaque fois avant d'utiliser des fonctions cryptographiques?

De plus, nous utilisons une réplique en lecture de db, où il n'a pas permis d'exécuter cette instruction "create extension" car il n'y a qu'une autorisation de lecture. Alors, comment rendre ces fonctions cryptographiques disponibles dans un tel environnement en lecture seule?

3
Arjun_TECH

pgcrypto est une extension Postgres classique. Vous devez l'installer une fois par base de données (pas par cluster de base de données comme vous le supposiez) pour l'utiliser. L'installation est permanente, les redémarrages de la base de données survivant.

Si vous voulez que chaque nouveau pour le pré-installer, vous pouvez l'installer dans la base de données de modèles par défaut template1 en vous y connectant et en l'installant normalement. Ou installez-le dans n'importe quelle autre base de données et utilisez ça comme modèle avec:

CREATE DATABASE new_db TEMPLATE my_template;

Voir:

Une autre chose qui peut mal tourner: le search_path. Voir:

Mais si c'était votre problème, vous obtiendrez des avertissements lorsque vous essayez d'installer la même extension une deuxième fois.

La seule autre explication exotique à laquelle je peux penser: votre base de données a peut-être été restaurée dans un état antérieur. Mais vous le sauriez certainement, n'est-ce pas?

Ou vous êtes-vous connecté par erreur à une autre base de données? La "réplique en lecture" que vous avez mentionnée?

comment rendre ces fonctions cryptographiques disponibles dans un tel environnement en lecture seule?

S'il n'est pas répliqué par votre solution de réplication, vous devez l'installer manuellement une fois.

5
Erwin Brandstetter