【问题标题】:Save database on external hard drive将数据库保存在外部硬盘上
【发布时间】:2016-07-04 09:30:06
【问题描述】:

我正在使用 PostgreSQL 创建一些数据库,但由于计算机内存不足,我想将它们保存在外部硬盘上。

我该怎么做?

【问题讨论】:

  • PostgreSQL 确实会写入您安装它的磁盘。这就是数据库的作用。
  • 我需要的存储容量是我的笔记本电脑所能提供的 4 倍。既然我在我的电脑上安装了 PostgreSQL,我应该在外置硬盘中重新安装它吗?
  • 数据库文件不需要在安装 PostgreSQL 的同一个磁盘上。

标签: sql postgresql


【解决方案1】:

您可以尝试按照演练here。这对我来说效果很好,类似于@Antiez 的回答。

目前,我正在尝试做同样的事情,而我目前唯一的冲突是 PostgreSQL 的增量备份和时间点恢复过程似乎存在问题。我认为这与文件夹权限有关。如果我尝试将 ~30MB 的 csv 上传到 postgres 数据库,它将崩溃并且服务器将无法重新启动,因为文件无法写入 pg_wal 目录。该目录中唯一的文件是 000000010000000000000001 并且在写入新表时不会移动到 000000010000000000000002 等。

可以在here 找到我在 stackoverflow 上寻找解决方案的帖子。

【讨论】:

    【解决方案2】:

    第 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
    

    【讨论】:

      【解决方案3】:

      您可以通过将数据库指定为data_directory 设置将其存储在另一个磁盘上。您需要在启动时指定它,它将适用于所有数据库。

      你可以把它放在postgresql.conf:

      data_directory = '/volume/path/'
      

      或者,在启动 PostgreSQL 时在命令行中指定:

      postgres -c data_directory='/volume/path/'
      

      参考:18.2. File Locations

      【讨论】:

      • 我正在尝试“data_directory /Volumes/NameOfMyHardDrive”,但收到以下信息:data_directory: command not found
      • 你需要把它放在postgresql.conf或者命令行中。我已将这些添加到我的答案中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多