Postgresql

在 Postgresql 中使用生產數據更新暫存數據

  • November 29, 2020

我在我的伺服器上使用 PostgreSQL(版本 9.3),我想用我的生產實例數據庫中的數據更新我的暫存實例數據庫中的數據。每個數據庫都由不同的角色控制,我想在轉移中保持它們的權限分開。

我嘗試遵循文件並使用我的單獨使用者(可以訪問相應的 PostgreSQL 角色)執行這些命令:

staging-user: pg_dump production_db > prod_db_file
production-user: psql --single-transaction staging_db < prod_db_file

但我有幾個錯誤:must be owner of extension plpgsqlsyntax error at or near. 此外,我不確定這是否會達到我想要的效果。pg_dump 和 psql 命令上有很多可選的標誌,我不知道應該使用哪些。(我已經嘗試了許多標誌組合,但到目前為止沒有任何效果。)

注意:當我嘗試上述命令時,我的暫存數據庫已經存在。

如何將我的生產數據移動到我的暫存數據庫?

2015 年 10 月 30 日更新:這個答案比我的舊答案更簡單、更準確,為簡潔起見,我將其刪除。要查看舊答案,請查看編輯歷史記錄。

  1. 作為生產使用者:pg_dump -Fc my_prod_db > prod_dump.db
  2. 刪除並創建臨時數據庫
  3. 作為登台使用者:pg_restore --no-owner --dbname my_staging_db path/to/prod_dump.db

除了基本的轉儲/恢復之外,要擁有自動化的強大刷新過程,您可以使用 Postgres.ai 的 Database Lab Engine https://postgres.ai/docs/https://gitlab.com/postgres-ai/database -實驗室. 它以某種方式從源中獲取數據(除了“邏輯”複製、轉儲/恢復之外,您還可以使用 pg_basebackup 或任何其他方式物理複製數據目錄,或者從由 WAL-G 等備份工具創建的存檔中恢復或 pgBackRest),然後您可以開始使用“精簡複製”,這允許“免費”獲取許多獨立的數據庫副本(無需額外費用或額外等待時間),這要歸功於 ZFS 提供的寫時複製 (CoW)或 LVM(您選擇)。在“物理”置備的情況下,還可以配置“持續刷新”選項:數據從源頭不斷更新,您可以使用基於不同時間點的精簡複製。

在許多情況下,當我們決定將生產數據複製到非生產環境時,我們可能希望或需要對數據進行混淆處理。這也是可能的,例如使用 postgresql_anonymizer https://postgresql-anonymizer.readthedocs.io/en/stable/>、<https://gitlab.com/dalibo/postgresql_anonymizer等工具。也可以將它與 Database Lab Engine 一起使用。

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