Как получить размер базы данных PostgreSQL из Python?

Я использую psycopg2 для получения размера базы данных PostgreSQL в Python3.

dbname = 'my_pg_database'
q = 'select pg_total_relation_size(%s);'
conn.cursor.execute(q, (dbname, ))
row = conn.cursor.fetchone()
print(str(row[0]))

Я также пробовал с тем же кодом, но переключая вторую строку:

q = 'select pg_total_relation_size((%s));'

И изменив вторую и третью строки:

dbname = 'my_pg_database'
q = 'select pg_total_relation_size({dbname});'.format(dbname=dbname)
conn.cursor.execute(q)
row = conn.cursor.fetchone()
print(str(row[0]))

Я всегда получаю одну и ту же синтаксическую ошибку, раньше у меня было много этой проблемы с другими запросами, но мне удалось справиться с этим, используя формат или другим способом, но не в этом случае. Кто-нибудь знает, почему?

ИЗМЕНИТЬ

Ошибки, которые я получаю:

С первым кодом:

psycopg2.ProgrammingError: отношение «my_pg_database» не существует LINE 1: select pg_total_relation_size («my_pg_database»);

Кстати, здесь есть своего рода стрелка, указывающая на первую цитату второй строки.

С третьим кодом:

psycopg2.ProgrammingError: столбец «my_pg_database» не существует LINE 1: выберите pg_total_relation_size (my_pg_database);

А здесь есть своего рода стрелка, указывающая на m my_pg_database второй строки.

Обратите внимание, что первая ошибка говорит об отношении, а вторая — о столбце.


person forvas    schedule 22.05.2014    source источник
comment
print — это функция в Python 3, а print(things, you, want, to print) не print things you want to print (обратите внимание на круглые скобки)   -  person Sean Vieira    schedule 22.05.2014
comment
ОК, на самом деле я не использую печать (вместо этого регистратор), но проблема, конечно, в запросе. Но я собираюсь изменить это здесь!   -  person forvas    schedule 22.05.2014
comment
Можете ли вы указать ошибку, которую вы получаете?   -  person Sean Vieira    schedule 22.05.2014
comment
Я отредактировал пост с ошибками.   -  person forvas    schedule 22.05.2014
comment
Вы используете неправильную функцию, вам нужна pg_database_size(), чтобы получить размер вашей базы данных. pg_total_relation_size() предназначена для одной таблицы и ее индексов.   -  person Frank Heikens    schedule 22.05.2014
comment
@Frank Я просто собирался опубликовать это как ответ. Так опубликуйте это.   -  person Clodoaldo Neto    schedule 22.05.2014


Ответы (1)


Вы используете неправильную функцию, вам нужна pg_database_size(), чтобы получить размер вашей базы данных. pg_total_relation_size() предназначена для одной таблицы и ее индексов.

Дополнительные сведения см. в руководстве.

person Frank Heikens    schedule 22.05.2014