pg_relation_size говорит мне, что столбец не существует - PullRequest
0 голосов
/ 28 октября 2009

http://www.postgresql.org/docs/8.4/static/functions-admin.html говорит:

pg_relation_size

принимает OID или имя таблицы, индекса или таблицы тостов и возвращает размер в байтах

однако, когда я использую его с допустимым именем таблицы, я получаю ошибку:

" столбец [таблица] не существует ..."

я знаю, что моя таблица существует, потому что делает

ВЫБРАТЬ счетчик (*) ОТ [таблица]

возвращает действительное число.

есть идеи?

Ответы [ 2 ]

1 голос
/ 19 июля 2012

Я получил ту же ошибку, хотя причина была в другом. pg_relation_size нечувствителен к регистру, поэтому, если у вас есть что-то кроме строчных букв, оно не будет работать из коробки:

postgres=> SELECT pg_size_pretty(pg_total_relation_size('MyTable'));
ERROR:  relation "mytable" does not exist
LINE 1: SELECT pg_size_pretty(pg_total_relation_size('mytable...
                                                     ^
postgres=> SELECT pg_size_pretty(pg_total_relation_size('"MyTable"'));
 pg_size_pretty
----------------
 225 MB
(1 row)

Таким образом, чтобы это работало в операторе SELECT, необходимо заключить имя таблицы в кавычки:

postgres=> SELECT relname, nspname, pg_size_pretty(pg_relation_size('"' || relname || '"')) 
  FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace  
  WHERE c.relkind IN ('r','') AND n.nspname NOT IN ('pg_catalog', 'pg_toast') AND pg_table_is_visible(c.oid) 
  ORDER BY c.relpages DESC;
1 голос
/ 28 октября 2009

Попробуйте явно добавить схему (например, 'public'), где таблица находится в вызове pg_relation_size.

Как это (не проверено):

select pg_relation_size(public.mytablename) from pg_tables
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...