有那麼一刻,託管 PostgreSQL 不再方便:您想要某個層級不提供的擴充,您想看到真實的查詢計畫並調優 work_mem,您想要超級使用者。當您想擁有 Postgres——設定、版本、擴充、備份時間表——一台擁有完整 root 的 VPS 就是誠實的答案。這是 PostgreSQL 專屬的設定;關於更寬泛的「自託管資料庫」全貌(Postgres 對 Redis、何時共享機器是錯的),見通用資料庫用例。
為什麼自託管 PostgreSQL
在您自己的機器上,您得到託管層級配給的東西:
- 整個
postgresql.conf——shared_buffers、work_mem、max_connections、WAL 設定,按您的工作負載調優,而非廠商預設值。 - 任意擴充。
pgvector用於嵌入,PostGIS用於地理空間,TimescaleDB用於時間序列,pg_cron,pg_stat_statements——需要什麼裝什麼。這正是託管層級最常說「不」的地方。 - 您的主版本,按您的時間表升級,而非提供商的。
- 超級使用者及其下的作業系統——移動資料目錄、調優核心、向第二台機器執行流複製。
如果 pgvector 是您來這裡的原因,請注意 Postgres 加 pgvector 就是一台機器上的完整向量儲存——與自託管 RAG 棧和代理記憶背後相同的建置塊。
設定它(Ubuntu 24.04,Docker)
# docker-compose.yml — PostgreSQL 16 (+ pgvector via the pgvector image)
services:
db:
image: pgvector/pgvector:pg16
restart: always
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: change-me-strong
POSTGRES_DB: app
command: ["postgres", "-c", "shared_buffers=512MB", "-c", "work_mem=32MB"]
volumes: ["/srv/pg:/var/lib/postgresql/data"]
ports: ["127.0.0.1:5432:5432"] # localhost only; see below to expose safely
docker compose up -d
docker compose exec db psql -U app -c "CREATE EXTENSION IF NOT EXISTS vector;"
綁定到 127.0.0.1,它為同一台機器上的一個應用服務,什麼都不暴露。要放其他伺服器進來,那是下一節。
讓其他伺服器連線——安全地
一旦另一台機器需要這個資料庫,兩件事就變了:
- 一個穩定、可路由的位址——一個專用 IPv4 方案(Small-IP $16,Medium-IP $20)。NAT 方案共享一個對外 IP,用於對外沒問題,但不適合作為別人撥入的資料庫。
- 硬核防火牆。 只對特定用戶端 IP 開放 5432,絕不要
0.0.0.0/0,並要求 TLS。公用上一個開放的 Postgres 埠幾分鐘內就會被發現——用 UFW 防火牆把它鎖死。
備份是您的活兒
自託管意味著備份歸您,而規則是:在需要之前就做好。用 cron 跑 pg_dump 做邏輯備份,或對您在乎的任何東西用 WAL 封存做時間點恢復。把轉儲運出這台機器,並至少測試一次恢復——一個您從未恢復過的備份是一個希望,不是備份。如果您寧願不自己執行,也有託管備份附加元件可用。
為什麼選 EQVPS 用於 PostgreSQL
- 完整 root、超級使用者、您的設定——每月 $8 起,NVMe(RAID1),一旦資料庫和它的 WAL 同時寫入就見真章。
- 無 KYC,加密貨幣付款。 註冊用電子郵件,付款用 USDC/USDT。
- 歐盟,約 60 秒拿到 root。帶上您的 schema 就走。
評論
目前還沒有評論。歡迎成為第一位。