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

7

我正在尝试从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
2个回答

9

3

Erwin Brandstetter的回答实现如下:

SELECT lo_unlink(l.oid) FROM pg_largeobject_metadata l;

vacuum full

cluster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接