【问题标题】:Is it possible to truncate the pg_largeobject table in postgres?是否可以在 postgres 中截断 pg_largeobject 表?
【发布时间】: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


【解决方案1】:

打开allow_system_table_mods 就是答案。然后截断只用了几分钟。感谢 Nick Barnes 的建议和确认此方法的 old article

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 2012-07-05
    • 2018-07-22
    • 2018-12-22
    • 1970-01-01
    • 2016-12-31
    • 2013-03-28
    相关资源
    最近更新 更多