編輯:原始問題中缺少一些背景關系。我使用 Git 的目標是與構建 REST API 服務器的第二個人共享正在開發的幾乎為空的資料庫的表結構和存盤程序
Git 不跟蹤空目錄,但 PostgreSQL 在啟動時需要它們。我怎樣才能讓兩者一起作業?
我在這個主題上所做的每一次搜索都會讓我看到 Git 解決方法的一些變體,其中包括將虛擬檔案添加到原本為空的目錄中。但是,PostgreSQL 至少在 pg_tblspc 目錄中不喜歡該解決方案。
PostgreSQL 啟動時需要的目錄有:
- pg_notify
- pg_tblspc
- pg_replslot
- pg_twophase
- pg_stat
- pg_快照
- pg_commit_ts
- pg_logical/映射
- pg_logical/快照
我正在從 Docker 容器運行 PostgreSQL,如下所示:
docker-compose.yml
version: "3.9"
services:
db:
build: ./pg_db/
image: db_MyDB
ports:
- "5432:5432"
volumes:
- ./pg_db/db_data:/var/lib/postgresql/data
./pg_db/Dockerfile
FROM postgres:14
ENV POSTGRES_PASSWORD=admin
ENV POSTGRES_USER=<admin password>
ENV POSTGRES_DB=db_MyDB
然后在 CLI 中...
git add .
git commit -m "something"
git push -u origin HEAD
稍后,如果我或其他用戶嘗試從 CLI 復制 GitHub 上的資料庫......
git clone https://github.com/<user>/<project>.git
cd <project>
docker-compose -up
結果是一組與上面列出的缺失的空目錄相關的啟動失敗。一旦我手動創建它們,PostgreSQL 就會啟動,據我所知沒有任何問題。
uj5u.com熱心網友回復:
一般來說,最好在某種變更管理框架中將模式物件定義保存在資料庫外部的文本檔案中。這可以是本地開發的解決方案,也可以是鏈接變更管理中顯示的眾多現有解決方案之一。在任何一種情況下,都將其置于版本控制之下,例如 Git 是一個額外的靈活性和冗余層。
基本原則是擁有存在于資料庫本身之外的模式(資料庫物件)定義。然后有一個程式以有序的方式將這些定義或更改應用于現有定義。最好以一種允許您前進到新狀態以及恢復到資料庫本身的先前狀態的方式。對此的版本控制工具可以維護模式更改的歷史記錄以及與任何專案相關的其他文本、代碼等。它還允許在不干擾現有設定的情況下進行分支嘗試新想法。
uj5u.com熱心網友回復:
感謝 Richard 和 Adrian 如此迅速地回復。
編輯:阿德里安在下面的評論中強調,Git 是對架構管理工具的強烈贊美
Git 是錯誤的工具。我需要的是一個架構管理工具,其中幾個在 PostgreSQL wiki 中突出顯示:https : //wiki.postgresql.org/wiki/Change_management_tools_and_techniques
原始問題中缺少一些背景關系。
我使用 Git 的目標是與構建 REST API 服務器的第二個人共享正在開發的幾乎為空的資料庫的表結構和存盤程序。我共享整個資料目錄的方法引起了一些混亂,事后看來,我可以看到在大多數情況下,通過架構更改推送可能的陳舊資料將是一個糟糕的主意。
我有我需要的東西,但是如果有人想為其他可能在搜索中結束的人提供更煽動性的答案,我很樂意接受您的答案作為正確答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/395072.html
標籤:PostgreSQL的 混帐 github
