yaugenka Asked: 2020-06-23 04:03:33 +0800 CST2020-06-23 04:03:33 +0800 CST 2020-06-23 04:03:33 +0800 CST 崩溃后如何清除 PostgreSQL 临时文件 772 我在进行聚类时遇到了电脑崩溃。计算机恢复后临时文件尚未清除。现在如何安全地清除它们? 更新 视窗操作系统。pgsql_tmp 目录为空,但磁盘空间仍被位于表基文件夹中的集群临时文件占用。 postgresql 1 个回答 Voted Best Answer Laurenz Albe 2020-06-23T07:24:06+08:002020-06-23T07:24:06+08:00 pgsql_tmp目录中的临时文件 您必须通过手动删除pgsql_tmp子目录中的文件来删除它们。 但要小心——手动弄乱数据目录总是很危险的。我建议只删除修改时间戳在过去安全的文件,也许在 Unix 系统上 find pgsql_tmp -mtime +1 -mindepth 1 -maxdepth 1 -exec rm {} \; 其它文件 如果您根本不是在谈论临时文件,而是在讨论在重写表的操作期间崩溃后留下的文件,例如VACUUM (FULL)或CLUSTER,ALTER TABLE情况就不那么简单了。 正确、安全的方法 用 备份数据库pg_dump,删除它并恢复它。 然后所有这些文件都应该消失了。 如果您负担不起停机时间,那是一种混乱、危险的方式 同样,手动处理数据目录应该留给专家,如果你删除了对你的数据库至关重要的东西,你就失去了你的数据库。除非您有良好的数据库物理备份,否则不要这样做。 假设您在谈论默认表空间,base即 PostgreSQL 数据目录的子目录。 更改为您的数据库的目录,您可以找到其名称 SELECT oid FROM pg_database WHERE datname = 'my_database'; 以下语句将在默认表空间中创建对象的所有“文件节点”列表: SELECT pg_relation_filenode(oid) FROM pg_class WHERE reltablespace = 0; 如果结果中出现数字 12345,则以下文件是该表、索引或其他对象的一部分:12345, 12345.1, 12345.2, ..., 12345_vm, 12345_fsm(基本上所有以 开头的文件12345)。 如果您对pg_class. 原则上可以删除。
pgsql_tmp
目录中的临时文件您必须通过手动删除
pgsql_tmp
子目录中的文件来删除它们。但要小心——手动弄乱数据目录总是很危险的。我建议只删除修改时间戳在过去安全的文件,也许在 Unix 系统上
其它文件
如果您根本不是在谈论临时文件,而是在讨论在重写表的操作期间崩溃后留下的文件,例如
VACUUM (FULL)
或CLUSTER
,ALTER TABLE
情况就不那么简单了。正确、安全的方法
用 备份数据库
pg_dump
,删除它并恢复它。然后所有这些文件都应该消失了。
如果您负担不起停机时间,那是一种混乱、危险的方式
同样,手动处理数据目录应该留给专家,如果你删除了对你的数据库至关重要的东西,你就失去了你的数据库。除非您有良好的数据库物理备份,否则不要这样做。
假设您在谈论默认表空间,
base
即 PostgreSQL 数据目录的子目录。更改为您的数据库的目录,您可以找到其名称
以下语句将在默认表空间中创建对象的所有“文件节点”列表:
如果结果中出现数字 12345,则以下文件是该表、索引或其他对象的一部分:
12345
,12345.1
,12345.2
, ...,12345_vm
,12345_fsm
(基本上所有以 开头的文件12345
)。如果您对
pg_class
. 原则上可以删除。