общий размер базы данных postgresql не соответствует сумме размеров отдельных таблиц

Моя база данных postgres (версия 8.2.3) показывает размер 24 ГБ.

To получить эту цифру Я выполняю этот запрос:

SELECT
  oid, datname, pg_database_size(datname) as actualsize, 
  pg_size_pretty(pg_database_size(datname)) as size 
FROM pg_database 
ORDER BY datname  

Однако размеры отдельных таблиц в той же базе данных не добавляют 24 ГБ, когда я выполняю этот запрос:

SELECT 
  schemaname, tablename, pg_size_pretty(size) AS size_pretty, 
  pg_size_pretty(total_size) AS total_size_pretty 
FROM
  (SELECT *, pg_relation_size(schemaname||'.'||tablename) AS size, 
   pg_total_relation_size(schemaname||'.'||tablename) AS total_size 
   FROM pg_tables where schemaname = 'public') AS TABLES 
ORDER BY total_size DESC;

I ' constexpr int я = 10; constexpr float f = 2.4f; constexpr двойной d = -10,4; constexpr std :: tuple

В C ++ 0x можно создать constexpr std :: tuple, например, как

#include <tuple>
constexpr int i = 10;
constexpr float f = 2.4f;
constexpr double d = -10.4;
constexpr std::tuple<int, float, double> tup(i, f, d);

Также можно запросить std :: tuple во время выполнения, например via

int i2 = std::get<0>(tup);

Но запросить его во время компиляции невозможно, например,

constexpr int i2 = std::get<0>(tup);

выдаст ошибку компиляции (по крайней мере, с последней версией g ++ снимок 2011-02-19).

Есть ли другой способ запросить constexpr std :: tuple во время компиляции?

А если нет, то есть ли концептуальная причина, по которой его не следует запрашивать?

(Я знаю, что избегаю использования std :: tuple, например, используя boost :: mpl или boost :: fusion, но почему-то неправильно не использовать класс кортежа в новом стандарте ...).

Кстати, кто-нибудь знает, почему

  constexpr std::tuple<int, float, double> tup(i, f, d);

компилируется нормально, а

  constexpr std::tuple<int, float, double> tup(10, 2.4f, -10.4);

нет?

Заранее большое спасибо! - lars

20
задан Lars 23 February 2011 в 05:34
поделиться