powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Двумерный уникальный индекс
7 сообщений из 7, страница 1 из 1
Двумерный уникальный индекс
    #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
Двумерный уникальный индекс
    #38766505
V&N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V&N
Гость
...
Рейтинг: 0 / 0
Двумерный уникальный индекс
    #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
Двумерный уникальный индекс
    #38766612
Hacker-CB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
V&N,

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

Попытался на postgres 9.3 сделать это, получил:
...
Рейтинг: 0 / 0
Двумерный уникальный индекс
    #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
Двумерный уникальный индекс
    #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
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Двумерный уникальный индекс
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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