Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Определение таблиц в которых хранятся "большие объекты"  [new]
D0KX
Member

Откуда:
Сообщений: 63
Доброго дня.
Помогите разобраться как найти таблицы в которых хранятся "большие объекты".

Делаю dump базы с чисткой крупных таблиц которые в этом дампе не важны.
Размер таблиц определяю выборкой из базы:

SELECT relname AS name, pg_size_pretty(pg_total_relation_size(relname::text)) as total_relation_size
      FROM pg_class 
      WHERE 
	 relnamespace = '2200'    
	 and relkind = 'r'
      ORDER BY relpages DESC;


но таким способом возвращается размер таблиц без учета хранящихся в них "больших объектов", хотя в pg_largeobject хранится несколько гигов информации.
Хочу определить таблицы в которых эти данных хранятся.
6 фев 20, 07:42    [22074309]     Ответить | Цитировать Сообщить модератору
 Re: Определение таблиц в которых хранятся "большие объекты"  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4071
D0KX
Доброго дня.
Помогите разобраться как найти таблицы в которых хранятся "большие объекты".

Делаю dump базы с чисткой крупных таблиц которые в этом дампе не важны.
Размер таблиц определяю выборкой из базы:

SELECT relname AS name, pg_size_pretty(pg_total_relation_size(relname::text)) as total_relation_size
      FROM pg_class 
      WHERE 
	 relnamespace = '2200'    
	 and relkind = 'r'
      ORDER BY relpages DESC;


но таким способом возвращается размер таблиц без учета хранящихся в них "больших объектов", хотя в pg_largeobject хранится несколько гигов информации.
Хочу определить таблицы в которых эти данных хранятся.


LO могут вообще не быть привязаны ни к какой таблице... это независимые объекты вообще.
Аналогичным образом один и тот же LO может к нескольким таблицам одновременно привязан.
Так что ваша постановка вопроса не совсем корректная именно потому что LO не хранятся "в таблице", в таблице может быть ссылка на какие то LO.
6 фев 20, 10:27    [22074385]     Ответить | Цитировать Сообщить модератору
 Re: Определение таблиц в которых хранятся "большие объекты"  [new]
gav21
Member

Откуда:
Сообщений: 111
D0KX,
на LOB ссылаются из полей с типом "OID"
попробуйте найти таблицы с типом oid, чтото вроде:
select table_name,column_name from information_schema.columns where data_type = 'oid' and table_name not like 'pg_%' and table_name not like '_pg%';
6 фев 20, 11:06    [22074441]     Ответить | Цитировать Сообщить модератору
 Re: Определение таблиц в которых хранятся "большие объекты"  [new]
entrypoint
Member

Откуда:
Сообщений: 227
D0KX,

автор
32.1. Введение
Все большие объекты хранятся в одной системной таблице с именем pg_largeobject. Для каждого большого объекта также имеется запись в системной таблице pg_largeobject_metadata. Большие объекты можно создавать, изменять и удалять, используя API чтения/записи, подобный стандартному API для работы с файлами.
https://postgrespro.ru/docs/postgresql/9.5/lo-intro

автор
34.1. Introduction
All large objects are stored in a single system table named pg_largeobject. Each large object also has an entry in the system table pg_largeobject_metadata. Large objects can be created, modified, and deleted using a read/write API that is similar to standard operations on files.
https://www.postgresql.org/docs/10/lo-intro.html


Сообщение было отредактировано: 6 фев 20, 16:14
6 фев 20, 16:14    [22074916]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить