powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / GIST constraint/check
9 сообщений из 9, страница 1 из 1
GIST constraint/check
    #38559911
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ситуация есть комнаты, хочется разрешить добавить бронь, и если prepayment = 't', то не разрешать больше добавлять бронь с датами пересекающими пред оплаченный период.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CREATE TABLE reservation
(
  res_id smallserial NOT NULL,
  room_id integer,
  drange daterange,
  prepayment boolean NOT NULL DEFAULT false,
  CONSTRAINT request_pkey PRIMARY KEY (res_id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE reservation
  OWNER TO postgres;

ALTER TABLE reservation
  ADD CONSTRAINT reservation_req_date_excl EXCLUDE
  USING gist (room_id WITH =, req_date WITH &&); --AND prepayment = true
-----------------
insert into reservation (room_id,drange,prepayment) VALUES (1,'[2014-02-13,2014-02-18]',false);	--ok
insert into reservation (room_id,drange,prepayment) VALUES (1,'[2014-02-14,2014-02-18]',true);	--ok
insert into reservation (room_id,drange,prepayment) VALUES (2,'[2014-02-14,2014-02-18]',true);	--ok
insert into reservation (room_id,drange,prepayment) VALUES (1,'[2014-02-15,2014-02-18]',true);	--bad
insert into reservation (room_id,drange,prepayment) VALUES (1,'[2014-02-16,2014-02-20]',false);	--bad если через check

Пытаюсь использовать gist, но незнание не дает продвинуться дальше :(.
Первая ошибка что room_id не подходящего типа, а как указать prepayment = true не знаю :(
...
Рейтинг: 0 / 0
GIST constraint/check
    #38559944
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SmeL_md,
http://www.sql.ru/forum/actualsearch.aspx?search=btree_gist EXCLUDE&sin=0&bid=7&a=&ma=0&dt=-1&s=1&so=1

и для =a,=b,{[NOT]between t}} вы вы не стали делать (a,t,b) индекс (т.е. оглавление), а ведь сделали бы (a,b,t).
Не правда, ли.
т.е. и тут. так же.
...
Рейтинг: 0 / 0
GIST constraint/check
    #38559947
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS

Код: sql
1.
EXCLUDE [ USING index_method ] ( exclude_element WITH operator [, ... ] ) index_parameters [ WHERE ( predicate )] |


=> пробуйте так:
Код: sql
1.
2.
3.
ALTER TABLE reservation
  ADD CONSTRAINT reservation_req_date_excl EXCLUDE
  USING gist (room_id WITH =, req_date WITH &&) WHERE prepayment = true;
...
Рейтинг: 0 / 0
GIST constraint/check
    #38559984
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,

Код: sql
1.
2.
3.
4.
5.
6.
ALTER TABLE reservation
  ADD CONSTRAINT reservation_req_date_excl EXCLUDE
  USING gist (room_id WITH =, req_date WITH &&) WHERE (prepayment = true);

ERROR:  data type integer has no default operator class for access method "gist"
HINT:  You must specify an operator class for the index or define a default operator class for the data type.

В документации видел room_id WITH = но для текстового поля, а как быть с числовыми?
...
Рейтинг: 0 / 0
GIST constraint/check
    #38559999
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
ALTER TABLE reservation
  ADD CONSTRAINT reservation_req_date_excl EXCLUDE
  USING gist ((room_id::text) WITH =, drange WITH &&) WHERE (prepayment = true);

тот же эффект :(
...
Рейтинг: 0 / 0
GIST constraint/check
    #38560018
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SmeL_md,
вас же посылали на btree_gist
ещё раз смотрим сюда:см
Непересекающиеся отрезки во времени (Гайд)

Код: sql
1.
CREATE EXTENSION btree_gist;

делали ?
...
Рейтинг: 0 / 0
GIST constraint/check
    #38560025
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все работает спасибо, нужен был btree_gist
...
Рейтинг: 0 / 0
GIST constraint/check
    #38560516
Фотография Misha Tyurin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SmeL_md,

Код: 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.
--drop table reservation;

/*
CREATE TABLE reservation
(
  res_id smallserial primary key,
  room_id integer,
  drange daterange,
  prepayment boolean NOT NULL DEFAULT false
)
;

ALTER TABLE reservation
  ADD CONSTRAINT reservation_req_date_excl EXCLUDE
  USING gist (int4range(room_id, room_id, '[]') WITH &&, drange WITH &&) where ( prepayment )
*/

  --insert into reservation (room_id,drange,prepayment) VALUES (1,'[2014-02-13,2014-02-18]',false);	--ok
--insert into reservation (room_id,drange,prepayment) VALUES (1,'[2014-02-14,2014-02-18]',true);	--ok
--insert into reservation (room_id,drange,prepayment) VALUES (2,'[2014-02-14,2014-02-18]',true);	--ok
insert into reservation (room_id,drange,prepayment) VALUES (1,'[2014-02-15,2014-02-18]',true);	--bad

--table reservation

--select int4range(1,1, '[]')



были варианты и без екстеншина
...
Рейтинг: 0 / 0
GIST constraint/check
    #38561057
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Misha Tyurin,
Супер, снес btree_gist и все работает.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / GIST constraint/check
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]