PostgreSQL docker-compos 更換版本到 pgvector
核心問題解答
-
可以直接改嗎?
是的,您必須修改 docker-compose.yml 檔案來更換 PostgreSQL 的映像檔。
-
原本的資料還會在嗎?
會的,您的資料是安全的,不會遺失。
原因是您的
docker-compose.yml中為postgres服務設定了 Docker Volume (儲存卷):YAML
volumes: - db_storage:/var/lib/postgresql/data這行設定的意思是,將 Docker 容器內的
/var/lib/postgresql/data(PostgreSQL 儲存資料的預設路徑) 掛載到一個名為db_storage的 Docker 儲存卷上。Docker 儲存卷的生命週期是獨立於容器的。當您修改設定並重啟服務時 (
docker-compose up),Docker 會:-
刪除舊的
postgres容器。 -
拉取您指定的新映像檔 (
pgvector/pgvector:pg16)。 -
建立一個新的
postgres容器。 -
將原本存在的
db_storage儲存卷重新掛載到新容器的/var/lib/postgresql/data路徑。
因此,您的所有資料庫資料、使用者、表格等都會被完整保留。
-
安全的操作步驟
為了確保萬無一失,請依照以下步驟操作:
步驟 0:(強烈建議) 備份您的資料庫
雖然這個過程是安全的,但在對生產環境做任何變更前,備份永遠是最好的習慣。
-
在您的
docker-compose.yml檔案所在的目錄下,執行以下指令來備份整個資料庫:Bash
```
這會將備份檔 my_backup.sql 存在您目前所在的目錄下
docker-compose exec -T postgres pg_dump -U ${POSTGRES_USER} -d ${POSTGRES_DB} > my_backup.sql ```
(請確保您的
.env檔中有POSTGRES_USER和POSTGRES_DB的設定)
步驟 1:停止目前的 n8n 服務
Bash
docker-compose down
(這個指令會停止並移除容器,但不會刪除 db_storage 這些儲存卷)
步驟 2:修改 docker-compose.yml
將 postgres 服務的 image 從 postgres:16 更換為 pgvector/pgvector:pg16。
修改前:
YAML
services:
postgres:
image: postgres:16
# ... 其他設定 ...
修改後:
YAML
services:
postgres:
image: pgvector/pgvector:pg16 # <-- 修改這一行
# ... 其他設定 ...
步驟 3:重新啟動服務
在 docker-compose.yml 檔案所在的目錄下,執行:
Bash
docker-compose up -d
Docker 會發現 postgres 服務的映像檔發生了變化,自動去拉取 pgvector/pgvector:pg16 這個新映像檔,並用它來啟動新的容器,同時掛載舊的 db_storage 儲存卷。
步驟 4:進入資料庫啟用 vector 擴充套件
服務啟動後,pgvector 軟體已經存在於容器中,但您還需要在資料庫裡啟用它。
-
執行以下指令進入 PostgreSQL 容器內的 psql 命令列:
Bash
docker-compose exec postgres psql -U ${POSTGRES_USER} -d ${POSTGRES_DB} -
在 psql 命令列中 (
postgres=#),執行以下 SQL 指令:SQL
CREATE EXTENSION IF NOT EXISTS vector; -
您可以驗證一下是否成功:
SQL
\dx vector如果看到
vector的相關資訊,就表示成功了。 -
輸入
\q並按下 Enter 離開 psql。
現在,您的 PostgreSQL 資料庫已經成功啟用了 vector 擴充功能,並且所有舊資料都完好無損。您可以回到 n8n 介面,Postgres PGVector Store 節點應該就可以正常運作了。