【问题标题】:Delete all Large Objects from PostgreSQL database从 PostgreSQL 数据库中删除所有大对象
【发布时间】:2016-01-13 07:46:47
【问题描述】:

我正在尝试从 PostgreSQL 数据库中删除所有大型对象。

我们使用大型图像数据集。最初,这些作为大对象存储在 postgres 中,以及它们的元数据。我正在将这些数据库转换为仅存储对图像的文件系统引用,以便更好地管理数据库与图像数据的磁盘需求,有时是冲突的。

在导出所有大对象、创建对它们的引用并进行测试后,我准备删除大对象。

我试图编写一个函数来删除所有这些,但无济于事。这似乎可行,但因为不是范围内的每个数字都对应一个大对象,所以它倒了。

CREATE OR REPLACE FUNCTION "DeleteLOs"() RETURNS INTEGER AS
$$
DECLARE

BEGIN 

FOR i IN 1620762..1801116 LOOP
SELECT lo_unlink(i);

END LOOP;
RETURN 0;

END;
$$
LANGUAGE plpgsql;

理想情况下,我可以将这样的函数与查询配对,以确保我得到所有这些,而不是指定一个可能不完整的范围:

SELECT DISTINCT loid FROM pg_largeobject

【问题讨论】:

    标签: sql postgresql blob


    【解决方案1】:

    要删除数据库中的所有个现有大对象:

    SELECT lo_unlink(l.oid) FROM pg_largeobject_metadata l;
    

    关于 dba.SE 的相关答案以及更多详细信息:

    【讨论】:

      【解决方案2】:

      Erwin Brandstetter 的回答是这样实现的:

      SELECT lo_unlink(l.oid) FROM pg_largeobject_metadata l;
      
      vacuum full
      
      cluster
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-22
        • 2011-03-20
        • 1970-01-01
        • 2020-04-18
        • 1970-01-01
        • 2022-08-16
        • 2011-03-17
        • 2018-09-16
        相关资源
        最近更新 更多