我正在使用PostgreSQL创建一些数据库,但由于计算机内存不足,我想将它们保存在外部硬盘上。
我该怎么做?
答案 0 :(得分:4)
您可以将数据库指定为data_directory
设置,将数据库存储在另一个磁盘上。您需要在启动时指定它,它将适用于所有数据库。
您可以将其放入postgresql.conf
:
data_directory = '/volume/path/'
或者,在启动PostgreSQL时在命令行中指定它:
postgres -c data_directory='/volume/path/'
答案 1 :(得分:1)
第 1 步:如果 postgresql 正在运行,请停止它:
sudo systemctl stop postgresql
第 2 步: 获取访问硬盘的路径。 (如果是 Linux)通过以下方式查找并挂载您的硬盘:
# Retrieve your device's name with:
sudo fdisk -l
# Then mount your device
sudo mount /dev/DEVICE_NAME YOUR_HD_DIR_PATH
步骤 3: 使用 rsync
将现有数据库目录复制到新位置(在您的硬盘驱动器中)。
sudo rsync -av /var/lib/postgresql YOUR_HD_DIR_PATH
然后用 .bak
扩展名重命名之前的 postgres 主目录以防止冲突
sudo mv /var/lib/postgresql/11/main /var/lib/postgresql/11/main.bak
注意:我的 postgres 版本是 11。用你的版本替换路径。
步骤 4: 编辑 postgres 配置文件:
sudo nano /etc/postgresql/11/main/postgresql.conf
将 data_directory
行更改为:
data_directory = 'YOUR_HD_DIR_PATH/postgresql/11/main'
步骤 5: 重新启动 Postgres 并检查一切是否正常
sudo systemctl start postgresql
pg_lsclusters
输出应显示状态为“在线”
Ver Cluster Port Status Owner Data directory Log file
11 main 5432 online postgres YOUR_HD_DIR_PATH/postgresql/11/main /var/log/postgresql/postgresql-11-main.log
最后您可以通过以下方式访问您的 PostgresSQL:
sudo -u postgres psql
答案 2 :(得分:0)
您可以尝试按照演练 here 进行操作。这对我很有效,类似于@Antiez 的回答。
目前,我正在尝试做同样的事情,目前我遇到的唯一冲突是 PostgreSQL 的增量备份和时间点恢复过程似乎存在问题。我认为这与文件夹权限有关。如果我尝试将 ~30MB csv 上传到 postgres 数据库,它将崩溃并且服务器不会再次启动,因为文件无法写入 pg_wal 目录。该目录中唯一的文件是 000000010000000000000001 并且在写入新表时不会移动到 000000010000000000000002 等。
可以在 here 找到我的 stackoverflow 帖子,寻找解决此问题的方法。