【发布时间】:2015-07-25 12:39:43
【问题描述】:
我想丢弃 pg_largeobject 表的内容并回收其磁盘空间。当我尝试发出此命令时:
truncate pg_largeobject
我收到此回复:
ERROR: permission denied: "pg_largeobject" is a system catalog
即使我以用户 postgres(超级用户)的身份发出命令也是如此。当表包含很多行时,没有足够的磁盘空间来执行 VACUUM FULL。我也尝试删除所有行以准备 VACUUM FULL,但这仍然持续了一整天,最终被打断。如果可能的话,我宁愿截断。
可以截断这张表吗?它目前包含大约 1 TB 我不再需要的图像。我已从所有其他表中删除了对该表的引用(并从 pg_largeobject_metadata 中删除了所有行)。
【问题讨论】:
-
在您的情况下,我会
pg_dump数据库,删除它,根据需要编辑 pg_dump 文件以删除您想要避免的任何剩余图像,然后重新创建数据库。我没有更巧妙的解决方案。 -
不过,在此之前,我可能会通过dba.stackexchange.com 询问这些人
-
如果启用
allow_system_table_mods选项,应该允许截断。我不知道直接修改这些表是否有任何后果,但如果你已经消灭了pg_largeobject_metadata,我想你已经过了不归路......
标签: postgresql