这是我第一次使用自己的专用服务器,在尝试将大型(10gb,数百万行)postgresql 备份文件导入新表时遇到问题。运行 ubuntu 18.04 LTS。
我已经使用 apt-get 安装了 postgresql,然后以 root 身份登录并创建了一个数据库。
然后我跑了
sudo -u postgres psql mytable < mybackupfile.bak
在/root
除了缺少角色错误之外,它开始运行,直到我开始收到如下错误:
ERROR: could not extend file "base/16384/16472.4": wrote only 4096 of
8192 bytes at block 635129
HINT: Check free disk space.
CONTEXT: COPY stock_prices, line 28568936
ERROR: could not extend file "base/16384/16480": No space left on device
HINT: Check free disk space.
CONTEXT: COPY stocks, line 99
之后它继续“正常”运行:
...
setval
---------
1864218
(1 row)
setval
---------
1356711
(1 row)
setval
--------
478761
(1 row)
...
直到它只是一堆:
ERROR: could not create temporary file "base/pgsql_tmp/pgsql_tmp3458.0": No such file or directory
ERROR: could not extend file "base/16384/16503": No space left on device
我的文件系统如下所示:
Filesystem Size Used Avail Use% Mounted on
udev 16G 0 16G 0% /dev
tmpfs 3.2G 1000K 3.2G 1% /run
/dev/md2 20G 12G 6.2G 67% /
tmpfs 16G 8.0K 16G 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 16G 0 16G 0% /sys/fs/cgroup
/dev/md3 420G 9.3G 390G 3% /home
/dev/md1 487M 146M 312M 32% /boot
tmpfs 3.2G 0 3.2G 0% /run/user/0
通过阅读一些相关问题,有人说服务器的分区存在问题这里,其他人说要增加根分区的大小,否则可能只是导入期间所需的临时内存的问题以及更改 psql 配置文件的问题。
我有点迷茫,服务器上除了基本的安全配置和 PSQL + 备份文件之外什么都没有,所以如果应该更改分区大小,那么现在是正确的时间,但我不知道我的情况发生了什么,如果这不能解决任何问题,我不想把一切都搞砸。
答案1
所以我关注了本教程将 datadir 移动到 /home/postgresql/ 并且它可以正常工作。
答案2
尝试增加postgresql.conf文件中的temp_tablespaces,参考是: https://www.postgresql.org/docs/10/runtime-config-client.html#GUC-TEMP-TABLESPACES. 默认情况下它是空字符串。