Oleg (obartunov) wrote,
Oleg
obartunov

Что нового в PostgreSQL 9.0 ?

Подготовил слайды для доклада "Что нового в PostgreSQL 9.0 ?" на конференции Корпоративные Базы Данных.

Больше всего меня вдохновляет в 9.0 - это конечно SR и HS (здесь я не одинок), но и Constraint Exclusion. Jeff Davis мне рассказывал про свою идею еще на конференции PGDay в Pratto (недалеко от Флоренции), в 2008 году ! Чтобы почувствовать ее посмотрите на пример:



postgres=# create table boxes_unique (id integer, box box, exclude using btree (id  with =), exclude using gist (box with &&) WHERE (box <@ '((0,0),(5,5))'));
NOTICE:  CREATE TABLE / EXCLUDE will create implicit index "boxes_unique_id_excl" for table "boxes_unique"
NOTICE:  CREATE TABLE / EXCLUDE will create implicit index "boxes_unique_box_excl" for table "boxes_unique"
CREATE TABLE
postgres=# \d boxes_unique
 Table "public.boxes_unique"
 Column |  Type   | Modifiers 
--------+---------+-----------
 id     | integer | 
 box    | box     | 
Indexes:
    "boxes_unique_box_excl" EXCLUDE USING gist (box WITH &&) WHERE (box <@ '(5,5),(0,0)'::box)
    "boxes_unique_id_excl" EXCLUDE USING btree (id WITH =)

postgres=# insert into boxes_unique values(1, '((0,0),(1,1))');
INSERT 0 1
postgres=# insert into boxes_unique values(2, '((0,0),(10,10))');
INSERT 0 1
postgres=# insert into boxes_unique values(3, '((0,0),(4,4))');
ERROR:  conflicting key value violates exclusion constraint "boxes_unique_box_excl"
DETAIL:  Key (box)=((4,4),(0,0)) conflicts with existing key (box)=((1,1),(0,0)).


Бокс '(0,0),(10,10)' вставился без проблем, так как проверка на overlap (&&) установлена только для боксов, вложенных в '(5,5),(0,0)'.

Ждем теперь поддержку GIN !
Tags: pg
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments