有那么一刻,托管 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 就走。
评论
暂无评论。来做第一个吧。