从PostgreSQL数据库中删除所有大对象

时间:2015-10-15 02:00:44

标签: sql postgresql blob

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

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

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

我曾尝试编写一个允许我删除所有这些功能的功能,但无济于事。这似乎有效,但因为不是该范围内的每个数字都对应一个大型物体,它就会失败。

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

2 个答案:

答案 0 :(得分:8)

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

form(method='post', action='/contact', enctype="multipart/form-data")
    .form-group
        label Name:
        input.form-control(name='name', type='text')
    input.btn.btn-default(name='submit',type='submit',value='Save')

关于dba.SE的相关答案以及更多细节:

答案 1 :(得分:1)

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

SELECT lo_unlink(l.oid) FROM pg_largeobject_metadata l;

vacuum full

cluster