Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

PostgreSQL

Войти
Регистрация
Восстановить пароль
 
Левиафам
33 / 28 / 9
Регистрация: 31.05.2012
Сообщений: 500
#1

Партиции - PostgreSQL

01.12.2016, 14:08. Просмотров 255. Ответов 4
Метки нет (Все метки)

Привет кодеры! Ситуация тут у меня интересная. Допустим у меня есть много партиций и они разбиты по датам за один месяц за другой и так далее....Как мне сделать так чтобы при селекте данных у меня запрос смотрел только в первую партицию или только во вторую.....Да, я знаю что можно явно указать партицию, но мне нужно чтобы табличка при селекте была указана рутовая а условие было таким чтобы позволяло запросу смотреть только в одну партицию а не во все!!!


Спасибо за помощь заранее!
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2016, 14:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Партиции (PostgreSQL):

Восстановление партиции NTFS - Жесткие диски
Стояла у меня система ArchLinux. Разделы были так: / - ext4 /home - ext4 /ntfs ....вообщем корневой раздел под систему в...

Восстановление Win7 из скрытой партиции - Windows 7
Очень прошу помочь. Есть моноблок Lenovo ideacentre A700. Купил 4 дня назад. Win7 home extendet 64-bit. Диск изначально был побит на две...

Восстановление партиции NTFS - Жесткие диски
Стояла у меня система ArchLinux. Разделы были так: / - ext4 /home - ext4 /ntfs ....вообщем корневой раздел под систему в...

Восстановление Win7 из скрытой партиции - Windows 7
Очень прошу помочь. Есть моноблок Lenovo ideacentre A700. Купил 4 дня назад. Win7 home extendet 64-bit. Диск изначально был побит на две...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
grgdvo
558 / 494 / 140
Регистрация: 02.09.2012
Сообщений: 1,443
01.12.2016, 14:35 #2
Может я не понял вопроса... вы в запрос же добавили условие ограничения дат заданной партиции??
покажите еще план выполнения запроса.

Добавлено через 2 минуты
и еще такой оптимизационный параметр нужно у себя посмотреть, он должен пригодиться: constraint_exclusion
0
Левиафам
33 / 28 / 9
Регистрация: 31.05.2012
Сообщений: 500
01.12.2016, 19:14  [ТС] #3
Цитата Сообщение от grgdvo Посмотреть сообщение
constraint_exclusion
с этим всё ок
Цитата Сообщение от grgdvo Посмотреть сообщение
вы в запрос же добавили условие ограничения дат заданной партиции??
explain analyze SELECT * FROM name_table WHERE time = '2016-08-26 13:41:26.688000';

вот так задал, но всё равно все партии смотрит.....
0
grgdvo
558 / 494 / 140
Регистрация: 02.09.2012
Сообщений: 1,443
05.12.2016, 17:11 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Немного запоздало отвечаю, но может пригодится?!
Покажите весь ваш DDL, касающийся всех таблиц и индексов вашей партиции.
Создал пробную партицию, вроде все в порядке.

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
DROP TABLE IF EXISTS test cascade;
 
CREATE TABLE test (
test_id INTEGER NOT NULL,
test_date TIMESTAMP NOT NULL,
test1 INT,
test2 DOUBLE PRECISION
);
 
CREATE TABLE test_y2016m09 ( 
CHECK(test_date >= '2016-09-01'::DATE AND test_date < '2016-10-01'::DATE)
) INHERITS (test);
CREATE TABLE test_y2016m10 ( 
CHECK(test_date >= '2016-10-01'::DATE AND test_date < '2016-11-01'::DATE)
) INHERITS (test);
CREATE TABLE test_y2016m11 ( 
CHECK(test_date >= '2016-11-01'::DATE AND test_date < '2016-12-01'::DATE)
) INHERITS (test);
CREATE TABLE test_y2016m12 ( 
CHECK(test_date >= '2016-12-01'::DATE AND test_date < '2017-01-01'::DATE)
) INHERITS (test);
 
INSERT INTO test_y2016m09 (test_id, test_date, test1, test2)
SELECT
generate_series(1,4000),
to_timestamp(1472652000+generate_series(0,3999)),
1+generate_series(1,2),
1.1+generate_series(1.1,2.1);
INSERT INTO test_y2016m10 (test_id, test_date, test1, test2)
SELECT
generate_series(4001,8000),
to_timestamp(1475244000+generate_series(0,3999)),
1+generate_series(1,2),
1.1+generate_series(1.1,2.1);
INSERT INTO test_y2016m11 (test_id, test_date, test1, test2)
SELECT
generate_series(8001,12000),
to_timestamp(1477922400+generate_series(0,3999)),
1+generate_series(1,2),
1.1+generate_series(1.1,2.1);
INSERT INTO test_y2016m12 (test_id, test_date, test1, test2)
SELECT
generate_series(12001,16000),
to_timestamp(1480514400+generate_series(0,3999)),
1+generate_series(1,2),
1.1+generate_series(1.1,2.1);
 
CREATE INDEX test_y2016m09_date ON test_y2016m09(test_date);
CREATE INDEX test_y2016m10_date ON test_y2016m10(test_date);
CREATE INDEX test_y2016m11_date ON test_y2016m11(test_date);
CREATE INDEX test_y2016m12_date ON test_y2016m12(test_date);
запрос
SQL
1
2
3
SELECT 
*
FROM test WHERE test_date='2016-11-01 01:00:00 +10';
план
Код
"Append  (cost=0.00..8.30 rows=2 width=24)"
"  ->  Seq Scan on test  (cost=0.00..0.00 rows=1 width=24)"
"        Filter: (test_date = '2016-11-01 01:00:00'::timestamp without time zone)"
"  ->  Index Scan using test_y2016m11_date on test_y2016m11  (cost=0.28..8.30 rows=1 width=24)"
"        Index Cond: (test_date = '2016-11-01 01:00:00'::timestamp without time zone)"
если SET constraint_exclusion = off, то

Код
"Append  (cost=0.00..33.19 rows=5 width=24)"
"  ->  Seq Scan on test  (cost=0.00..0.00 rows=1 width=24)"
"        Filter: (test_date = '2016-11-01 01:00:00'::timestamp without time zone)"
"  ->  Index Scan using test_y2016m09_date on test_y2016m09  (cost=0.28..8.30 rows=1 width=24)"
"        Index Cond: (test_date = '2016-11-01 01:00:00'::timestamp without time zone)"
"  ->  Index Scan using test_y2016m10_date on test_y2016m10  (cost=0.28..8.30 rows=1 width=24)"
"        Index Cond: (test_date = '2016-11-01 01:00:00'::timestamp without time zone)"
"  ->  Index Scan using test_y2016m11_date on test_y2016m11  (cost=0.28..8.30 rows=1 width=24)"
"        Index Cond: (test_date = '2016-11-01 01:00:00'::timestamp without time zone)"
"  ->  Index Scan using test_y2016m12_date on test_y2016m12  (cost=0.28..8.30 rows=1 width=24)"
"        Index Cond: (test_date = '2016-11-01 01:00:00'::timestamp without time zone)"
0
Левиафам
33 / 28 / 9
Регистрация: 31.05.2012
Сообщений: 500
07.12.2016, 10:31  [ТС] #5
grgdvo, спасибо, но я уже разобрался . Тоже накинул ограничения и теперь оптимизация проходит. Сейчас вот с тригерами капаюсь при инсерте еще и рулесы обозреваю. Спасибо бро за помощь. ....если что буду проблемы я обращусь)))
0
Yandex
Объявления
07.12.2016, 10:31
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru