Как найти длину данных и длину индекса отдельных таблиц в схеме postgresql? - PullRequest
0 голосов
/ 30 мая 2019

Я переношу свое приложение из MySQL в PostgreSQL. В MySQL я использовал запрос для вычисления объема памяти отдельных таблиц в соответствии с моим требованием, используя приведенный ниже запрос

SELECT SUM(ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024),2)) 'Size in MB' FROM  INFORMATION_SCHEMA.TABLES where TABLE_NAME like 'table_name';

Но я не могу сделать то же самое в PostgreSQL. Если я запускаю тот же запрос, он отображается как,

ERROR:  type "sum" does not exist

И я пробовал решения на разных сайтах, но не могу найти точное решение для своего требования. Пожалуйста, предложите мне решение. Заранее спасибо.

Ответы [ 2 ]

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

Ваш запрос не выполнен, поскольку вы используете одинарные кавычки для псевдонима - 'Size in MB'.

Далее, DATA_LENGTH и INDEX_LENGTH недоступны в INFORMATION_SCHEMA.TABLES

В Postgres вы можете использовать функцию pg_total_relation_size.

SELECT ROUND(pg_total_relation_size (oid) / ( 1024.0 * 1024.0 ), 2) AS 
       "Size in MB" 
FROM   pg_class c 
WHERE  relname = 'table_name'; 

Посмотрите на этот ответ, чтобы узнать, какие функции доступны для получения различных размеров.

DEMO

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

PostgreSQL не имеет этой информации в INFORMATION_SCHEMA.TABLES , но вы можете попробовать использовать таблицу SVV_TABLE_INFO для получения размера таблицы.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...