无法写入哈希连接临时文件:设备上没有剩余空间。

13

我正在执行PostgreSQL函数以更新一个拥有大量数据的表格,每天需要更新约100000条记录。在更新过程中,我收到了以下错误提示:

"could not write to hash-join temporary file: No space left on device"

我并没有真正找到有用的方法来解决这个错误。我找到了一个说需要设置临时表空间的方法,但是我不知道如何创建一个能够在更新过程执行期间存储数据的临时表空间。


您的 PostgreSQL 数据所在的磁盘空间是否即将耗尽? - Vivek S.
不,磁盘还有很多可用空间。 - Yousuf Sultan
2个回答

11
  1. SQL> create tablespace temp_tbs location '/some/big/disk';
  2. 在postgresql.conf文件中更改temp_tablespaces = 'temp_tbs'
  3. select pg_reload_conf();
  4. 享受吧

2
可以使用以下代码:SET temp_tablespaces = temp_tbs; - Vivek S.
我们如何知道正在执行的函数将使用哪个特定的临时表空间? - Yousuf Sultan
@YousufSultan 如果你在temp_tablespaces中指定了任何一个,它会使用其中的任意一个...所以如果你用逗号分隔指定了多个,它会按照你提供的顺序使用。如果你只指定了一个 - 它会使用这个,如果没有设置,它会使用pg_default。 - Vao Tsun
我大概有90%的把握,使用SET temp_tablespaces只会在您的会话中持续有效。 - mlissner
这里有一个大疏漏。你还需要运行这个命令:grant create on tablespace temp_space to public;。否则只有 postgres 用户可以使用该表空间。 - mlissner
显示剩余3条评论

2
我遇到了同样的问题,但是我在使用docker。
如果你也在使用docker,请按照以下步骤操作:
进入 Docker Preferences > Disk Panel > Disk image size 并增加它。
这解决了我的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接