内容 / 指南 / PostgreSQL

VPS上的 PostgreSQL: 安装、调谐、备份

默认的 PostgreSQL 安装为 90 年代的工作站 。 在2–8 GB VPS上,一些设置改变了一切——这里是简短的版本,有真实的数字.

1. 安装

apt update && apt install -y postgresql postgresql-contrib
systemctl enable --now postgresql
sudo -u postgres psql -c "SELECT version();"

Ubuntu舰 PostgreSQL 16于24.04开通. 这个版本已经足够现代了 任何你可能运行。

2. 创建数据库和用户

sudo -u postgres psql <<'SQL'
CREATE USER app WITH PASSWORD 'strong-password';
CREATE DATABASE appdb OWNER app;
SQL
psql "postgresql://app:strong-password@localhost/appdb" -c "SELECT 1;"

永远不要在应用程序中使用邮箱超级用户 。 每个应用程序一个用户,每个项目一个数据库.

3. 存储器的通量

编辑 /etc/postgresql/16/main/postgresql.conf 并基于服务器大小设置值 :

设置2 GB VPS 键4 GB VPS 键8 GB VPS 单曲
共享库名( B)512MB (英语).1GB (英语).2GB 常规
无效( C)1GB (英语).2.5GB (中文(简体) ).5GB 常规
工作( M)16MB (英语).第32MB号48MB (英语).
维护 工作 mem128MB (英语).256MB (英语).512MB (英语).
最大连接50100150
systemctl restart postgresql
sudo -u postgres psql -c "SHOW shared_buffers;"

如果您的应用程序打开了上百个连接, 将 PgBouncer 放在前面, 而不是提高 最大 连接 —— 每个连接都需要内存 。

4. 每日转场

cat > /usr/local/bin/pg-dump-all <<'EOF'
#!/bin/sh
set -e
DIR=/var/backups/postgres
mkdir -p "$DIR"
sudo -u postgres pg_dumpall --globals-only > "$DIR/globals.sql"
for db in $(sudo -u postgres psql -Atc "SELECT datname FROM pg_database WHERE datistemplate = false"); do
  sudo -u postgres pg_dump -Fc "$db" > "$DIR/$db.dump"
done
find "$DIR" -type f -mtime +7 -delete
EOF
chmod +x /usr/local/bin/pg-dump-all

添加到括号中 crontab -e:

30 3 * * * /usr/local/bin/pg-dump-all

垃圾桶是一致的快照;活数据目录的文件副本不是. 然后把垃圾堆放在外边,我们 静态向导 覆盖这部分。

5. 恢复垃圾堆

sudo -u postgres createdb appdb_restore
sudo -u postgres pg_restore -d appdb_restore /var/backups/postgres/appdb.dump

快速回答

我能打开PostgreSQL的互联网吗?

最好别这样 保留在本地主机上,让应用直接与其交谈,或使用SSH隧道. 如果您必须将其曝光,则只允许您在防火墙中的IP,并需要TLS.

PostgreSQL有什么计划?

2 GB RAM对于开发及小型应用来说是精细的,4 GB对于一个制作网站来说是舒适的,而8 GB处理一个忙碌的数据库并用缓存. NVMe存储在这里比额外的核心更重要.

我该怎么检查什么问的很慢?

启用 pg stat 语句扩展并按平均时间排序 。 它通常显示一到两个缺失的索引来解释大部分负载.

一个舒适的生产数据库开始于 Buran-2,13欧元/欧元.

相关