Партицирование по timestamptz и индекс по (integer, timestamptz)

Здравствуйте.
Возможно ли? Находил на различных форумах информацию, что не получиться, что операции с timestamptz всегда stable. Так ли это? И если не должно работать, то почему у меня вроде бы работает?

Базовая таблица и производные от нее:

CREATE TABLE part_test
(
  id integer NOT NULL,
  time_value timestamp WITH time zone NOT NULL
)
 
CREATE TABLE part_test_y2012m01
(
  CONSTRAINT part_test_y2012m01_pkey PRIMARY KEY (id , time_value ),
  CONSTRAINT part_test_y2012m01_time_value_check CHECK (time_value >= '2012-01-01 00:00:00+00'::timestamp WITH time zone AND time_value < '2012-02-01 00:00:00+00'::timestamp WITH time zone)
)
INHERITS (part_test)
 
CREATE TABLE part_test_y2012m02
(
  CONSTRAINT part_test_y2012m02_pkey PRIMARY KEY (id , time_value ),
  CONSTRAINT part_test_y2012m02_time_value_check CHECK (time_value >= '2012-02-01 00:00:00+00'::timestamp WITH time zone AND time_value < '2012-03-01 00:00:00+00'::timestamp WITH time zone)
)
INHERITS (part_test)

Базовая таблица всегда пустая (там return null; у нее в триггере before insert). В производных таблицах по 5 записей (для теста).

Запрос и результат:

EXPLAIN analyze
SELECT
	*
FROM
	part_test AS pt
WHERE
	pt.time_value >= '2012-01-01 17:00:00+06'
	AND pt.time_value <= '2012-01-04 20:00:00+06'

QUERY PLAN
Result  (cost=0.00..77.33 rows=20 width=12) (actual time=0.041..0.044 rows=4 loops=1)
  ->  Append  (cost=0.00..77.33 rows=20 width=12) (actual time=0.038..0.039 rows=4 loops=1)
        ->  Seq Scan ON part_test pt  (cost=0.00..39.10 rows=10 width=12) (actual time=0.012..0.012 rows=0 loops=1)
              Filter: ((time_value >= '2012-01-01 11:00:00+00'::timestamp WITH time zone) AND (time_value <= '2012-01-04 14:00:00+00'::timestamp WITH time zone))
        ->  Bitmap Heap Scan ON part_test_y2012m01 pt  (cost=27.65..38.23 rows=10 width=12) (actual time=0.023..0.024 rows=4 loops=1)
              Recheck Cond: ((time_value >= '2012-01-01 11:00:00+00'::timestamp WITH time zone) AND (time_value <= '2012-01-04 14:00:00+00'::timestamp WITH time zone))
              ->  Bitmap INDEX Scan ON part_test_y2012m01_pkey  (cost=0.00..27.65 rows=10 width=0) (actual time=0.017..0.017 rows=4 loops=1)
                    INDEX Cond: ((time_value >= '2012-01-01 11:00:00+00'::timestamp WITH time zone) AND (time_value <= '2012-01-04 14:00:00+00'::timestamp WITH time zone))
Total runtime: 0.144 ms

Как видно, обращения получились только к одной из производных таблиц.
В чем я ошибаюсь? Ведь вроде бы все работает, или это не так?
(timezone на сервере: UTC)

----------------------------------------
Ответ получен.
http://www.sql.ru/forum/actualthread.aspx?tid=922686

Back to top

(С) Виктор Вислобоков, 2008-2023