Postgresql

我是否需要每次都執行“創建擴展 pgcrypto”?

  • July 8, 2019

crypt()在我的一個函式中使用了雜湊使用者密碼。但是我第二天啟動我的電腦時觀察到,同樣的事情失敗了,因為重啟後加密功能變得不可用。它顯示類似功能gen_salt()/crypt()未知或未定義的消息。我執行了create extension pgcrypto;一次,它開始工作。

如何在 prod 環境中處理這個問題?即使重新啟動 db,是否有辦法使該模組在 db 中永久可用?

或者如果他們需要重新啟動數據庫伺服器,我是否必須指示伺服器管理器執行此命令?

或者我可以在函式本身中編寫此語句,以便每次在使用加密函式之前創建擴展?

此外,我們正在使用 db 的只讀副本,它不允許執行此“創建擴展”語句,因為只有讀取權限。那麼如何在這樣的只讀環境中使這個加密函式可用呢?

pgcrypto是一個正常的 Postgres 擴展。您必須為每個數據庫(而不是您可能假設的每個數據庫集群)安裝一次才能使用它。安裝是永久的,倖存的數據庫重新啟動。

如果您希望同一個數據庫集群中的每個數據庫都預先安裝它,您可以template1通過連接到預設模板數據庫並正常安裝來將其安裝到預設模板數據庫中。或者將其安裝在任何其他數據庫中並將用作模板:

CREATE DATABASE new_db TEMPLATE my_template;

看:

另一件可能出錯的事情:search_path. 看:

但是,如果這是您的問題,那麼您在第二次嘗試安裝相同的擴展程序時會收到警告。

我能想到的唯一其他奇特的解釋:您的數據庫可能已恢復到以前的狀態。但你肯定知道這一點,不是嗎?

還是您只是錯誤地連接到不同的數據庫?您提到的“只讀副本”?

如何使這種加密功能在這種只讀環境中可用?

如果您的複制解決方案沒有複製它,您必須手動安裝一次。

引用自:https://dba.stackexchange.com/questions/197167