Re: [pgsql-ru-general] Re: [pgsql-ru-general] Частично уникальное поле
От | Dmitriy Igrishin |
---|---|
Тема | Re: [pgsql-ru-general] Re: [pgsql-ru-general] Частично уникальное поле |
Дата | |
Msg-id | AANLkTimQay4V=H12B9wbTgBywFCzQh8kRhZ8wEANqZS4@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: [pgsql-ru-general] Re: [pgsql-ru-general] Частично уникальное поле (Nikolay Samokhvalov <samokhvalov@gmail.com>) |
Ответы |
Re: [pgsql-ru-general] Re: [pgsql-ru-general] Частично уникальное поле
(Nikolay Samokhvalov <samokhvalov@gmail.com>)
|
Список | pgsql-ru-general |
13 марта 2011 г. 3:48 пользователь Nikolay Samokhvalov <samokhvalov@gmail.com> написал:
2011/3/13 Dmitriy Igrishin <dmitigr@gmail.com>Приветствую,13 марта 2011 г. 2:54 пользователь Nikolay Samokhvalov <samokhvalov@gmail.com> написал:Уникальный индекс -- это уже и есть ограничение целостности. Можно ещё раз повторю? И ещё, на ночь, чтобы запомнилось....or group of columns used in the constraint.". Надеюсь, что после этого Вы не станете
утверждать, что ограничение уникальности является уникальным (btree) индексом.
Я всегда ратовал и буду ратовать за корректность.Ни разу такого не утверждал.Раз любите корректность, включите ещё логику)Из "А является Б" вовсе не следует утверждение "Б является А".
О чем вообще тут может быть речь? Читайте внимательно 5.3.3 документации.
Вы правы по своему в том смысле, что ограничение уникальности, создаваемое
ключевым словом UNIQUE, _обеспечивается_ с помощью уникального индекса,
который для этого и создаётся.
А вообще, ограничение уникальности можно обеспечить и без создания индекса -
триггером. Сложно, но можно.
Вы правы по своему в том смысле, что ограничение уникальности, создаваемое
ключевым словом UNIQUE, _обеспечивается_ с помощью уникального индекса,
который для этого и создаётся.
А вообще, ограничение уникальности можно обеспечить и без создания индекса -
триггером. Сложно, но можно.
Для новичков нужно запоминать именно так, чтобы как раз и не возникало вопросов "а как создать constraint".Ой, да ладно про "спец курсы для новичков". :-)Не смешно. Порог входа у Постгреса очень высокий. И чем больше мы стараемся умничать, тем выше он становится.
Порог такой, какой он есть. Кто захочет, тот осилит. А умничаем мы тогда,
когда несём отсебятину, а не ссылаемся на скрупулезно составляемую,
великолепную документацию.
когда несём отсебятину, а не ссылаемся на скрупулезно составляемую,
великолепную документацию.
Про размер индекса -- верно, частичный индекс экономит место, если NULL-ов ожидается много. Но при этом надо понимать, что будут последствия для оптимайзера (всё же это индекс и он может пригодиться не только как ограничение целостности).Какие такие последствия?Берём две табличкиm=# \d aTable "public.a"Column | Type | Modifiers--------+---------+-----------num | integer |txt | text |Indexes:"a_txt_key" UNIQUE, btree (txt)m=# \d bTable "public.b"Column | Type | Modifiers--------+---------+-----------num | integer |txt | text |Indexes:"u_b" UNIQUE, btree (txt) WHERE txt IS NOT NULLЗаполняем даннымиm=# insert into a select 1, random()::text from generate_series(1, 10000);INSERT 0 10000m=# insert into a select 1, NULL from generate_series(1, 1000);INSERT 0 1000m=# insert into b select 1, random()::text from generate_series(1, 10000);INSERT 0 10000m=# insert into b select 1, NULL from generate_series(1, 1000);INSERT 0 1000Ну и финальное, перед сном)m=# explain select * from a order by txt limit 10;QUERY PLAN-------------------------------------------------------------------------------Limit (cost=0.00..0.84 rows=10 width=36)-> Index Scan using a_txt_key on a (cost=0.00..711.56 rows=8487 width=36)(2 rows)m=# explain select * from b order by txt limit 10;QUERY PLAN--------------------------------------------------------------------Limit (cost=416.71..416.73 rows=10 width=36)-> Sort (cost=416.71..444.21 rows=11000 width=36)Sort Key: txt-> Seq Scan on b (cost=0.00..179.00 rows=11000 width=36)(4 rows)
Это последствия? Я думал, что это результат работы парсера :-)
--
// Dmitriy.
В списке pgsql-ru-general по дате отправления:
Предыдущее
От: "Dmitry E. Oboukhov"Дата:
Сообщение: Re: Re: [pgsql-ru-general] Re: [pgsql-ru-general] Частично уникальное поле
Следующее
От: Nikolay SamokhvalovДата:
Сообщение: Re: [pgsql-ru-general] Re: [pgsql-ru-general] Re: [pgsql-ru-general] Частично уникальное поле