Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Двумерный уникальный индекс / 7 сообщений из 7, страница 1 из 1
03.10.2014, 16:19:33
    #38766325
Hacker-CB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двумерный уникальный индекс
Есть таблица:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE public.services_resources (
  id SERIAL, 
  resource_id INTEGER NOT NULL, 
  service_id INTEGER NOT NULL, 
  date_start TIMESTAMP WITHOUT TIME ZONE NOT NULL, 
  date_end TIMESTAMP WITHOUT TIME ZONE DEFAULT 'infinity'::timestamp without time zone NOT NULL, 
  CONSTRAINT services_resources_pkey PRIMARY KEY(id), 
) WITHOUT OIDS;



Нужно чтобы связка "resource_id/service_id" были уникальная в единицу времени "date_start/date_end".
Что-то в духе двумерного уникального индекса.

Вроде в 9-ке что-то было для этого, напомните пожалуйста.
...
Рейтинг: 0 / 0
03.10.2014, 17:42:44
    #38766505
V&N
V&N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двумерный уникальный индекс
...
Рейтинг: 0 / 0
03.10.2014, 19:30:27
    #38766606
V&N
V&N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двумерный уникальный индекс
V&N, пример забыл...
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create extension if not exists btree_gist;
--drop extension if exists btree_gist cascade;
drop table if exists test_resources;
create table test_resources (
  id serial, 
  resource_id integer not null, 
  service_id integer not null, 
  date_start timestamp without time zone not null, 
  date_end timestamp without time zone default 'infinity'::timestamp without time zone not null, 
  constraint test_resources_pkey primary key(id));

alter table test_resources  add constraint xak_test_resources_resource_id_service_id_range_date_start_date_end
    exclude using gist (resource_id with =, service_id with =, tsrange(date_start, date_end) with &&);

insert into test_resources values (default, 1,1, (now()-'1 day'::interval)::date::timestamp, (now()+'10 day'::interval)::date::timestamp);--ok
insert into test_resources values (default, 1,2, (now()-'0 day'::interval)::date::timestamp, (now()+'11 day'::interval)::date::timestamp);--ok
insert into test_resources values (default, 1,3, (now()-'0 day'::interval)::date::timestamp, (now()+'11 day'::interval)::date::timestamp);--ok
insert into test_resources values (default, 1,1, (now()-'10 day'::interval)::date::timestamp, (now()-'0 day'::interval)::date::timestamp);--error


select * from test_resources
...
Рейтинг: 0 / 0
03.10.2014, 19:46:58
    #38766612
Hacker-CB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двумерный уникальный индекс
V&N,

благодарю, как раз то что нужно.
...
Рейтинг: 0 / 0
18.11.2014, 13:25:37
    #38809453
Hacker-CB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двумерный уникальный индекс
V&N,

Попытался на postgres 9.3 сделать это, получил:
...
Рейтинг: 0 / 0
18.11.2014, 13:26:02
    #38809457
Hacker-CB
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двумерный уникальный индекс
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.
...
Рейтинг: 0 / 0
18.11.2014, 14:00:27
    #38809525
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Двумерный уникальный индекс
Hacker-CBERROR: 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.

попробуйте btree_gist contrib поставить.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Двумерный уникальный индекс / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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