Как определить таблицы, которые используют большие объекты в Postgres? - PullRequest
0 голосов
/ 15 мая 2019

Я oracle dba и недавно начал изучать администрирование баз данных postgres. В одной из наших баз данных postgres таблица pg_largeobject имеет размер 30 ГБ, и я хочу освободить место на диске, отсоединив и очистив большие объекты, которые не используются никакими таблицами в базе данных. Для этого я хотел бы знать таблицы в базе данных, которые используют эти большие объекты. Есть ли какой-либо запрос или процедура для достижения этого?

Обновление: Я попытался с помощью вакуума, но он вернул 0 объектов для удаления. Это означает, что большие объекты не являются осиротевшими, но у нас нет таблицы в базе данных, которая ссылается на большинство объектов в таблице pg_largeobject. Тогда почему эти объекты не осиротели?

1 Ответ

0 голосов
/ 16 мая 2019

Обычно приложения должны отсоединять большие объекты, которые больше не нужны, но в случае, если они этого не делают, PostgreSQL поставляется с утилитой с именем vacuumlo, которая делает именно то, что вы запрашиваете .

Описание:

вакуум - это простая служебная программа, которая удалит все «осиротевшие» большие объекты из базы данных PostgreSQL. Большой осиротевший объект (LO) считается любым LO, OID которого не указан ни в одном oid или lo столбец данных базы данных.


Если есть одна таблица с oid, указывающая на большие объекты, большие потерянные объекты могут быть найдены непосредственно с помощью этого запроса (PostgreSQL 9.0 или новее):

select oid from pg_largeobject_metadata m where not exists
 (select 1 from name_of_table  where m.oid=name_of_oid_column);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...