Buy Me a Coffee

如何使用 Docker 安裝具有 Vector 資料庫的 PostgreSQL


今天要跟大家分享一個超級實用的技巧——如何使用 Docker 安裝並設定支援向量資料庫 (vector database) 的 PostgreSQL。讓我們一起來看看這篇文章吧!

什麼是 Vector 資料庫?

在進入技術細節之前,讓我們先了解一下什麼是向量資料庫。向量資料庫主要用於儲存和處理向量數據,這對於現代的數據分析和機器學習應用非常重要。例如,向量資料庫可以幫助我們高效地進行相似度搜索和聚類分析。

使用 Docker 安裝 PostgreSQL 並添加 Vector 支援

Step 1: 建立 Docker Compose 設定檔

首先,我們需要建立一個 docker-compose.yml 檔案,這是用來配置我們的 Docker 容器的。這裡我們將設定兩個服務:db (PostgreSQL) 和 pgadmin (用來管理資料庫的 GUI)。

version: "3.7"
services:
  db:
    image: postgres:13.2-alpine
    restart: always
    environment:
      POSTGRES_DB: postgres
      POSTGRES_USER: 使用者帳號
      POSTGRES_PASSWORD: 密碼
      PGDATA: /var/lib/postgresql/data
    volumes:
      - /local/path/for/data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    networks:
      - app-network

  pgadmin:
    image: dpage/pgadmin4:latest
    restart: always
    environment:
      PGADMIN_DEFAULT_EMAIL: your-email@example.com
      PGADMIN_DEFAULT_PASSWORD: your-pgadmin-password
      PGADMIN_LISTEN_PORT: 80
    ports:
      - "8080:80"
    volumes:
      - pgadmin-data:/var/lib/pgadmin
    networks:
      - app-network

volumes:
  pgadmin-data:

networks:
  app-network:
    driver: bridge

使用 .env 檔案

我們可以使用 .env 檔案來管理環境變數,這樣可以更方便地修改和管理敏感資訊。創建一個名為 .env 的檔案,內容如下:

POSTGRES_USER=使用者帳號
POSTGRES_PASSWORD=密碼
PGADMIN_DEFAULT_EMAIL=your-email@example.com
PGADMIN_DEFAULT_PASSWORD=your-pgadmin-password

然後,在 docker-compose.yml 檔案中引用這些變數:

version: "3.7"
services:
  db:
    image: postgres:13.2-alpine
    restart: always
    environment:
      POSTGRES_DB: postgres
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      PGDATA: /var/lib/postgresql/data
    volumes:
      - /local/path/for/data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    networks:
      - app-network

  pgadmin:
    image: dpage/pgadmin4:latest
    restart: always
    environment:
      PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL}
      PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD}
      PGADMIN_LISTEN_PORT: 80
    ports:
      - "8080:80"
    volumes:
      - pgadmin-data:/var/lib/pgadmin
    networks:
      - app-network

volumes:
  pgadmin-data:

networks:
  app-network:
    driver: bridge

Step 2: 添加向量資料庫支援

接下來,我們需要為 PostgreSQL 添加 pgvector 擴展,這樣就可以支援向量資料類型和操作。為此,我們需要建立一個自定義的 Dockerfile。

創建一個名為 Dockerfile.pgvector 的檔案,內容如下:

FROM postgres:13.2-alpine

RUN apk add --no-cache make gcc g++ clang llvm10 wget

RUN wget https://github.com/pgvector/pgvector/archive/refs/tags/v0.1.4.tar.gz \
    && tar -xzvf v0.1.4.tar.gz \
    && cd pgvector-0.1.4 \
    && make && make install

RUN apk del make gcc g++ clang llvm10

Step 3: 重建 Docker 容器

在配置好 docker-compose.ymlDockerfile.pgvector 之後,我們需要重建 Docker 容器。打開終端機,執行以下命令:

docker-compose down
docker-compose up --build

這樣就會重新建立和啟動 Docker 容器,同時安裝 pgvector 擴展。

Step 4: 使用 pgAdmin 連接 PostgreSQL

現在,我們可以使用 pgAdmin 來連接和管理我們的 PostgreSQL 資料庫。

  1. 開啟 pgAdmin: 在瀏覽器中打開 http://localhost:8080
  2. 登入 pgAdmin: 使用你在 .env 檔案中設定的 email 和 password。
  3. 添加新伺服器:
    • 右鍵點擊 “Servers”,選擇 “Create” > “Server”。
    • 在 “General” 標籤中,輸入伺服器名稱 (例如 Local PostgreSQL)。
    • 在 “Connection” 標籤中,填寫以下資訊:
      • Host: db
      • Port: 5432
      • Username: ${POSTGRES_USER}
      • Password: ${POSTGRES_PASSWORD}
      • Database: postgres
    • 點擊 “Save” 保存設置。

Verify Network Configuration

要確保 pgAdmin 和 PostgreSQL 容器能夠互相通信,我們需要驗證 Docker 的網路配置。

  1. 檢查 Docker 網路: 執行以下命令來列出 Docker 網路,並檢查由 Docker Compose 創建的網路:

    docker network ls
    

    你應該會看到一個名稱類似 your_project_default 的網路。

    檢查該網路:

    docker network inspect your_project_default
    

    確保 dbpgadmin 服務都列在 Containers 下。

  2. 明確定義網路: 在 docker-compose.yml 中明確定義一個網路,確保兩個服務使用相同的網路。

    networks:
      app-network:
        driver: bridge
    
  3. 重建容器: 在更新 docker-compose.yml 之後,關閉現有的容器並重新啟動以應用更改:

    docker-compose down
    docker-compose up --build
    
  4. 測試連接: 使用 ping 測試 pgadmin 容器能否解析並連接到 db 服務。

    docker exec -it <pgadmin_container_id> /bin/bash
    ping db
    

使用向量資料庫

現在,你的 PostgreSQL 資料庫已經支援向量資料類型,你可以使用 pgvector 擴展來執行向量操作。以下是一個簡單的示例,展示如何在 PostgreSQL 中使用向量資料類型:

CREATE TABLE items (
    id SERIAL PRIMARY KEY,
    vector VECTOR(3)
);

INSERT INTO items (vector) VALUES ('[1, 2, 3]'), ('[4, 5, 6]'), ('[7, 8, 9]');

SELECT * FROM items WHERE vector <-> '[1, 2, 3]' < 1.5;

在這個示例中,我們創建了一個包含向量資料類型的表格,並插入了一些向量

數據。然後,我們使用向量相似度操作符 <-> 來查詢與特定向量接近的記錄。

結論

恭喜你!現在你已經成功地使用 Docker 安裝並設定了支援向量資料庫的 PostgreSQL。這將大大提升你的數據分析和機器學習應用的能力。希望這篇文章對你有所幫助,如果有任何問題或需要進一步的指導,請隨時聯絡我。

感謝你的閱讀,祝你有個美好的一天!

graph TD
    A[開始] --> B[創建 .env 檔案]
    B --> C[編寫 docker-compose.yml]
    C --> D[創建 Dockerfile.pgvector]
    D --> E[執行 docker-compose up --build]
    E --> F{服務啟動成功?}
    F -->|是| G[訪問 pgAdmin]
    F -->|否| H[檢查 Docker 日誌]
    H --> I[檢查網路配置]
    I --> J[檢查環境變數]
    J --> E
    G --> K[創建新伺服器連接]
    K --> L[設置 pgAdmin 連接參數]
    L --> M[成功連接 PostgreSQL]