F.26. hypopg â поддеÑжка гипоÑеÑиÑеÑÐºÐ¸Ñ Ð¸Ð½Ð´ÐµÐºÑов #
F.26.1. ÐпиÑание #
hypopg â ÑÑо ÑаÑÑиÑение Postgres Pro, добавлÑÑÑее поддеÑÐ¶ÐºÑ Ð³Ð¸Ð¿Ð¾ÑеÑиÑеÑÐºÐ¸Ñ Ð¸Ð½Ð´ÐµÐºÑов.
ÐипоÑеÑиÑеÑкий или виÑÑÑалÑнÑй Ð¸Ð½Ð´ÐµÐºÑ â ÑÑо индекÑ, коÑоÑÑй на Ñамом деле не ÑÑÑеÑÑвÑеÑ, поÑÑÐ¾Ð¼Ñ Ð½Ð° его Ñоздание не ÑаÑÑ Ð¾Ð´ÑÑÑÑÑ ÑеÑÑÑÑÑ Ð¿ÑоÑеÑÑоÑа, диÑка и пÑоÑие. Такие индекÑÑ Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÑÑ Ð±ÐµÐ· заÑÑÐ°Ñ ÑеÑÑÑÑов вÑÑÑниÑÑ, можно ли повÑÑиÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ Ð¿ÑоблемнÑÑ Ð·Ð°Ð¿ÑоÑов Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ°ÐºÐ¸Ñ -либо индекÑов, а Ñакже ÑзнаÑÑ, бÑÐ´ÐµÑ Ð»Ð¸ Postgres Pro иÑполÑзоваÑÑ ÑÑи индекÑÑ Ð¸Ð»Ð¸ неÑ.
F.26.2. УÑÑановка #
РаÑÑиÑение hypopg поÑÑавлÑеÑÑÑ Ð²Ð¼ÐµÑÑе Ñ Postgres Pro в виде оÑделÑного пакеÑа hypopg-ent-16 (подÑобнÑе инÑÑÑÑкÑии по ÑÑÑановке пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð² Ðлаве 16). ÐоÑле ÑÑÑановки Postgres Pro ÑоздайÑе ÑаÑÑиÑение hypopg:
CREATE EXTENSION hypopg;
РаÑÑиÑение hypopg ÑепеÑÑ Ð´Ð¾ÑÑÑпно. ÐÑо можно пÑовеÑиÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ psql:
\dx
List of installed extensions
Name | Version | Schema | Description
---------+---------+------------+-------------------------------------
hypopg | 1.4.1 | public | Hypothetical indexes for Postgres Pro
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
(2 rows)Ðидно, ÑÑо ÑаÑÑиÑение hypopg ÑÑÑановлено.
F.26.3. ФÑнкÑии #
РаÑÑиÑение hypopg можно иÑполÑзоваÑÑ, ÑÑÐ¾Ð±Ñ Ð¿ÑовеÑиÑÑ, Ð¿Ð¾Ð¼Ð¾Ð¶ÐµÑ Ð»Ð¸ какой-либо Ð¸Ð½Ð´ÐµÐºÑ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ или неÑколÑÐºÐ¸Ñ Ð·Ð°Ð¿ÑоÑов. ÐоÑÑÐ¾Ð¼Ñ Ð²Ð°Ð¼ должно бÑÑÑ Ñже извеÑÑно, какие запÑоÑÑ Ð½Ñжно опÑимизиÑоваÑÑ Ð¸ какие индекÑÑ Ð¿Ð¾Ð¿ÑобоваÑÑ.
ÐипоÑеÑиÑеÑкие индекÑÑ, коÑоÑÑе ÑоздаÑÑ hypopg, Ñ ÑанÑÑÑÑ Ð½Ðµ в каÑалоге, а в ÑобÑÑвенной памÑÑи ваÑего ÑоединениÑ. Таким обÑазом, ÑÑо не ÑаздÑÐ²Ð°ÐµÑ ÑаблиÑÑ Ð¸ не влиÑÐµÑ Ð½Ð° паÑаллелÑнÑе ÑоединениÑ.
ÐÑоме Ñого, поÑколÑÐºÑ Ð³Ð¸Ð¿Ð¾ÑеÑиÑеÑкие индекÑÑ ÑакÑиÑеÑки не ÑÑÑеÑÑвÑÑÑ, hypopg гаÑанÑиÑÑеÑ, ÑÑо они бÑдÑÑ Ð¸ÑполÑзоваÑÑÑÑ ÑолÑко в обÑÑном опеÑаÑоÑе EXPLAIN (без паÑамеÑÑа ANALYZE).
ÐоддеÑживаÑÑÑÑ ÑледÑÑÑие меÑÐ¾Ð´Ñ Ð´Ð¾ÑÑÑпа:
btreebrinhashbloom(ÑÑебÑеÑÑÑ Ð½Ð°Ð»Ð¸Ñие ÑÑÑановленного ÑаÑÑиÑÐµÐ½Ð¸Ñ bloom)
ÐÑимеÑание
ÐÑполÑзование hypopg ÑÑебÑÐµÑ Ð½ÐµÐºÐ¾ÑоÑÑÑ
знаний о команде EXPLAIN.
F.26.3.1. Создание гипоÑеÑиÑеÑкого индекÑа #
-
hypopg_create_index()# РаÑÑмоÑÑим пÑоÑÑой пÑимеÑ:
CREATE TABLE hypo (id integer, val text) ; INSERT INTO hypo SELECT i, 'line ' || i FROM generate_series(1, 100000) i ; VACUUM ANALYZE hypo ;
У ÑÑой ÑаблиÑÑ Ð½ÐµÑ Ð¸Ð½Ð´ÐµÐºÑа. ÐÑедположим, Ð¼Ñ Ñ Ð¾Ñим пÑовеÑиÑÑ, Ð¿Ð¾Ð¼Ð¾Ð¶ÐµÑ Ð»Ð¸ Ð¸Ð½Ð´ÐµÐºÑ Ð¿ÑоÑÑÐ¾Ð¼Ñ Ð·Ð°Ð¿ÑоÑÑ. СнаÑала поÑмоÑÑим, как он ÑÐµÐ±Ñ Ð²ÐµÐ´ÑÑ:
EXPLAIN SELECT val FROM hypo WHERE id = 1; QUERY PLAN -------------------------------------------------------- Seq Scan on hypo (cost=0.00..1791.00 rows=1 width=14) Filter: (id = 1) (2 rows)ÐÑполÑзÑеÑÑÑ Ð¿ÑоÑÑое поÑледоваÑелÑное ÑканиÑование, поÑколÑÐºÑ Ð¸Ð½Ð´ÐµÐºÑа в ÑаблиÑе неÑ. ÐоÑÑÑоение индекÑа B-деÑева по ÑÑолбÑÑ
idдолжно помоÑÑ ÑÑÐ¾Ð¼Ñ Ð·Ð°Ð¿ÑоÑÑ. ÐÑовеÑим ÑÑо Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ hypopg. ФÑнкÑиÑhypopg_create_index()пÑÐ¸Ð¼ÐµÑ Ð»ÑбÑе ÑÑандаÑÑнÑе опеÑаÑоÑÑCREATE INDEX(лÑбÑе дÑÑгие опеÑаÑоÑÑ, пеÑеданнÑе ÑÑой ÑÑнкÑии, бÑдÑÑ Ð¿ÑоигноÑиÑованÑ) и ÑоздаÑÑ Ð³Ð¸Ð¿Ð¾ÑеÑиÑеÑкий Ð¸Ð½Ð´ÐµÐºÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾:SELECT * FROM hypopg_create_index('CREATE INDEX ON hypo (id)') ; indexrelid | indexname ------------+---------------------- 18284 | <18284>btree_hypo_id (1 row)ФÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð´Ð²Ð° ÑÑолбÑа:
иденÑиÑикаÑÐ¾Ñ Ð¾Ð±ÑекÑа гипоÑеÑиÑеÑкого индекÑа
ÑгенеÑиÑованное Ð¸Ð¼Ñ Ð³Ð¸Ð¿Ð¾ÑеÑиÑеÑкого индекÑа
Ðожно Ñнова запÑÑÑиÑÑ
EXPLAIN, ÑÑÐ¾Ð±Ñ ÑвидеÑÑ, бÑÐ´ÐµÑ Ð»Ð¸ Postgres Pro иÑполÑзоваÑÑ ÑÑÐ¾Ñ Ð¸Ð½Ð´ÐµÐºÑ:EXPLAIN SELECT val FROM hypo WHERE id = 1; QUERY PLAN ---------------------------------------------------------------------------------- Index Scan using <18284>btree_hypo_id on hypo (cost=0.04..8.06 rows=1 width=10) Index Cond: (id = 1) (2 rows)Ðа, Postgres Pro бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ Ñакой индекÑ. ТепеÑÑ Ð½Ñжно ÑбедиÑÑÑÑ, ÑÑо гипоÑеÑиÑеÑкий Ð¸Ð½Ð´ÐµÐºÑ Ð½Ðµ бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ ÑакÑиÑеÑкого вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑа:
EXPLAIN ANALYZE SELECT val FROM hypo WHERE id = 1; QUERY PLAN --------------------------------------------------------------------------------------------------- Seq Scan on hypo (cost=0.00..1791.00 rows=1 width=10) (actual time=0.046..46.390 rows=1 loops=1) Filter: (id = 1) Rows Removed by Filter: 99999 Planning time: 0.160 ms Execution time: 46.460 ms (5 rows)ÐÑо вÑÑ, ÑÑо Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð³Ð¸Ð¿Ð¾ÑеÑиÑеÑÐºÐ¸Ñ Ð¸Ð½Ð´ÐµÐºÑов и пÑовеÑки, бÑÐ´ÐµÑ Ð»Ð¸ Postgres Pro иÑполÑзоваÑÑ Ñакие индекÑÑ.
F.26.3.2. УпÑавление гипоÑеÑиÑеÑкими индекÑами #
РпÑедÑÑавлении hypopg_list_indexes пеÑеÑиÑÐ»ÐµÐ½Ñ Ð²Ñе ÑозданнÑе гипоÑеÑиÑеÑкие индекÑÑ.
SELECT * FROM hypopg_list_indexes ;
indexrelid | index_name | schema_name | table_name | am_name
------------+-----------------------+-------------+------------+---------
18284 | <18284>btree_hypo_id | public | hypo | btree
(1 row)-
hypopg()# ФÑнкÑиÑ
hypopg()вÑÐ²Ð¾Ð´Ð¸Ñ ÑпиÑок вÑÐµÑ Ð³Ð¸Ð¿Ð¾ÑеÑиÑеÑÐºÐ¸Ñ Ð¸Ð½Ð´ÐµÐºÑов, ÑозданнÑÑ Ð² Ñом же ÑоÑмаÑе, ÑÑо иpg_index.SELECT * FROM hypopg() ; indexname | indexrelid | indrelid | innatts | indisunique | indkey | indcollation | indclass | indoption | indexprs | indpred | amid ----------------------+------------+----------+---------+-------------+--------+--------------+----------+-----------+----------+---------+------ <18284>btree_hypo_id | 13543 | 18122 | 1 | f | 1 | 0 | 1978 | <NULL> | <NULL> | <NULL> | 403 (1 row)-
hypopg_get_indexdef(oid)# ФÑнкÑиÑ
hypopg_get_indexdef(oid)пеÑеÑиÑлÑÐµÑ Ð¾Ð¿ÐµÑаÑоÑÑCREATE INDEX, коÑоÑÑе воÑÑоздадÑÑ ÑÐ¾Ñ ÑанÑннÑй гипоÑеÑиÑеÑкий индекÑ.SELECT index_name, hypopg_get_indexdef(indexrelid) FROM hypopg_list_indexes ; index_name | hypopg_get_indexdef -----------------------+---------------------------------------------- <18284>btree_hypo_id | CREATE INDEX ON public.hypo USING btree (id) (1 row)-
hypopg_relation_size(oid)# ФÑнкÑиÑ
hypopg_relation_size(oid)вÑÑиÑлÑÐµÑ ÑÐ°Ð·Ð¼ÐµÑ Ð³Ð¸Ð¿Ð¾ÑеÑиÑеÑкого индекÑа:SELECT index_name, pg_size_pretty(hypopg_relation_size(indexrelid)) FROM hypopg_list_indexes ; index_name | pg_size_pretty -----------------------+---------------- <18284>btree_hypo_id | 2544 kB (1 row)-
hypopg_drop_index(oid)# ФÑнкÑиÑ
hypopg_drop_index(oid)ÑдалÑÐµÑ ÑказаннÑй гипоÑеÑиÑеÑкий индекÑ.-
hypopg_reset()# ФÑнкÑиÑ
hypopg_reset()ÑдалÑÐµÑ Ð²Ñе гипоÑеÑиÑеÑкие индекÑÑ.
F.26.3.3. ÐипоÑеÑиÑеÑкое ÑкÑÑÑие ÑÑÑеÑÑвÑÑÑÐ¸Ñ Ð¸Ð½Ð´ÐµÐºÑов #
-
hypopg_hide_index(oid)# Ðожно гипоÑеÑиÑеÑки ÑкÑÑваÑÑ ÐºÐ°Ðº ÑÑÑеÑÑвÑÑÑие, Ñак и гипоÑеÑиÑеÑкие индекÑÑ. ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе пÑоÑеÑÑиÑоваÑÑ ÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÑоглаÑно опиÑÐ°Ð½Ð¸Ñ Ð² докÑменÑаÑии, ÑнаÑала вÑзовиÑе ÑÑнкÑиÑ
hypopg_reset(), ÑÑÐ¾Ð±Ñ Ð¾ÑиÑÑиÑÑ ÑиÑÑÐµÐ¼Ñ Ð¾Ñ Ð´ÑÑÐ³Ð¸Ñ Ð³Ð¸Ð¿Ð¾ÑеÑиÑеÑÐºÐ¸Ñ Ð¸Ð½Ð´ÐµÐºÑов.РкаÑеÑÑве пÑимеÑа ÑаÑÑмоÑÑим два индекÑа:
SELECT hypopg_reset(); CREATE INDEX ON hypo(id); CREATE INDEX ON hypo(id, val);
EXPLAIN SELECT * FROM hypo WHERE id = 1; QUERY PLAN ---------------------------------------------------------------------------------- Index Only Scan using hypo_id_val_idx on hypo (cost=0.29..8.30 rows=1 width=13) Index Cond: (id = 1) (2 rows)Ðлан запÑоÑа ÑепеÑÑ Ð¸ÑполÑзÑÐµÑ Ð¸Ð½Ð´ÐµÐºÑ
hypo_id_val_idx.ФÑнкÑиÑ
hypopg_hide_index(oid)позволÑÐµÑ ÑкÑÑÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð² вÑводеEXPLAIN, иÑполÑзÑÑ ÐµÐ³Ð¾ OID. ÐозвÑаÑÐ°ÐµÑ true, еÑли Ð¸Ð½Ð´ÐµÐºÑ Ð±Ñл ÑÑпеÑно ÑкÑÑÑ, и false в пÑоÑивном ÑлÑÑае.SELECT hypopg_hide_index('hypo_id_val_idx'::REGCLASS); hypopg_hide_index ------------------- t (1 row) EXPLAIN SELECT * FROM hypo WHERE id = 1; QUERY PLAN ------------------------------------------------------------------------- Index Scan using hypo_id_idx on hypo (cost=0.29..8.30 rows=1 width=13) Index Cond: (id = 1) (2 rows)РкаÑеÑÑве пÑимеÑа пÑедположим, ÑÑо план запÑоÑа в даннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¸ÑполÑзÑÐµÑ Ð¸Ð½Ð´ÐµÐºÑ
hypo_id_val_idx. ÐÐ»Ñ Ð¿ÑÐ¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ÑполÑзÑйÑе ÑÑнкÑиÑhypopg_hide_index(oid), ÑÑÐ¾Ð±Ñ ÑкÑÑÑÑ Ð´ÑÑгой индекÑ.SELECT hypopg_hide_index('hypo_id_idx'::REGCLASS); hypopg_hide_index ------------------- t (1 row) EXPLAIN SELECT * FROM hypo WHERE id = 1; QUERY PLAN ------------------------------------------------------- Seq Scan on hypo (cost=0.00..180.00 rows=1 width=13) Filter: (id = 1) (2 rows)-
hypopg_unhide_index(oid)# ФÑнкÑиÑ
hypopg_unhide_index(oid)воÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ñанее ÑкÑÑÑÑй Ð¸Ð½Ð´ÐµÐºÑ Ð² вÑводеEXPLAIN, иÑполÑзÑÑ ÐµÐ³Ð¾ OID. ÐозвÑаÑÐ°ÐµÑ true, еÑли Ð¸Ð½Ð´ÐµÐºÑ Ð±Ñл ÑÑпеÑно воÑÑÑановлен, и false в пÑоÑивном ÑлÑÑае.SELECT hypopg_unhide_index('hypo_id_idx'::regclass); hypopg_unhide_index ------------------- t (1 row) EXPLAIN SELECT * FROM hypo WHERE id = 1; QUERY PLAN ------------------------------------------------------------------------- Index Scan using hypo_id_idx on hypo (cost=0.29..8.30 rows=1 width=13) Index Cond: (id = 1) (2 rows)-
hypopg_unhide_all_index(oid)# ФÑнкÑиÑ
hypopg_unhide_all_index()воÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð²Ñе ÑкÑÑÑÑе индекÑÑ Ð¸ возвÑаÑаеÑvoid.-
hypopg_hidden_indexes()# ФÑнкÑиÑ
hypopg_hidden_indexes()возвÑаÑÐ°ÐµÑ ÑпиÑок OID Ð´Ð»Ñ Ð²ÑÐµÑ ÑкÑÑÑÑÑ Ð¸Ð½Ð´ÐµÐºÑов.SELECT * FROM hypopg_hidden_indexes(); indexid --------- 526604 (1 rows)
РпÑедÑÑавлении hypopg_hidden_indexes ÑодеÑжиÑÑÑ ÑоÑмаÑиÑованнÑй ÑпиÑок вÑеÑ
ÑкÑÑÑÑÑ
индекÑов.
SELECT * FROM hypopg_hidden_indexes;
indexrelid | index_name | schema_name | table_name | am_name | is_hypo
-------------+----------------------+-------------+------------+---------+---------
526604 | hypo_id_val_idx | public | hypo | btree | f
(1 rows)ÐÑимеÑание
ÐипоÑеÑиÑеÑкие индекÑÑ Ñакже можно ÑкÑÑваÑÑ.
SELECT hypopg_create_index('CREATE INDEX ON hypo(id)');
hypopg_create_index
------------------------------
(12659,<12659>btree_hypo_id)
(1 row)
EXPLAIN SELECT * FROM hypo WHERE id = 1;
QUERY PLAN
------------------------------------------------------------------------------------
Index Scan using "<12659>btree_hypo_id" on hypo (cost=0.04..8.05 rows=1 width=13)
Index Cond: (id = 1)
(2 rows)ТепеÑÑ, когда иÑполÑзÑеÑÑÑ Ð³Ð¸Ð¿Ð¾ÑеÑиÑеÑкий индекÑ, можно попÑобоваÑÑ ÑкÑÑÑÑ ÐµÐ³Ð¾, ÑÑÐ¾Ð±Ñ ÑвидеÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ:
SELECT hypopg_hide_index(12659);
hypopg_hide_index
-------------------
t
(1 row)
EXPLAIN SELECT * FROM hypo WHERE id = 1;
QUERY PLAN
-------------------------------------------------------------------------
Index Scan using hypo_id_idx on hypo (cost=0.29..8.30 rows=1 width=13)
Index Cond: (id = 1)
(2 rows)
SELECT * FROM hypopg_hidden_indexes;
indexrelid | index_name | schema_name | table_name | am_name | is_hypo
-------------+----------------------+-------------+------------+---------+---------
12659 | <12659>btree_hypo_id | public | hypo | btree | t
526604 | hypo_id_val_idx | public | hypo | btree | f
(2 rows)ÐÑимеÑание
ÐÑли гипоÑеÑиÑеÑкий Ð¸Ð½Ð´ÐµÐºÑ Ð±Ñл ÑкÑÑÑ, он бÑÐ´ÐµÑ Ð°Ð²ÑомаÑиÑеÑки ÑаÑкÑÑÑ Ð¿Ñи Ñдалении ÑÑнкÑией hypopg_drop_index(oid) или hypopg_reset().
SELECT hypopg_drop_index(12659);
SELECT * FROM hypopg_hidden_indexes;
indexrelid | index_name | schema_name | table_name | am_name | is_hypo
-------------+----------------------+-------------+------------+---------+---------
526604 | hypo_id_val_idx | public | hypo | btree | f
(2 rows)F.26.4. ÐаÑамеÑÑÑ GUC #
ÐоÑÑÑÐ¿Ð½Ñ ÑледÑÑÑие паÑамеÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии (GUC), коÑоÑÑе можно изменÑÑÑ Ð¸Ð½ÑеÑакÑивно:
-
hypopg.enabled# Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÐºÐ»ÑÑÑн (
on). ÐÑполÑзÑйÑе ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð´Ð»Ñ Ð³Ð»Ð¾Ð±Ð°Ð»Ñного вклÑÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ оÑклÑÑÐµÐ½Ð¸Ñ hypopg. ÐÑли ÑаÑÑиÑение оÑклÑÑено, гипоÑеÑиÑеÑкие индекÑÑ Ð½Ðµ бÑдÑÑ Ð¸ÑполÑзоваÑÑÑÑ, но Ñже опÑеделÑннÑе гипоÑеÑиÑеÑкие индекÑÑ Ð½Ðµ бÑдÑÑ ÑдаленÑ.-
hypopg.use_real_oids# Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÑклÑÑен (
off). ÐÑи Ñаком знаÑении hypopg не бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ Â«ÑеалÑнÑе» иденÑиÑикаÑоÑÑ Ð¾Ð±ÑекÑов, а вмеÑÑо ÑÑого позаимÑÑвÑÐµÑ Ð¸Ñ Ð¸Ð· диапазона ~ 14000 / 16384 (ÑооÑвеÑÑÑвенно наименÑÑий неиÑполÑзÑемÑй OID менÑÑеFirstNormalObjectIdиFirstNormalObjectId), коÑоÑÑе заÑезеÑвиÑÐ¾Ð²Ð°Ð½Ñ Postgres Pro Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² бÑдÑÑÐ¸Ñ Ð²ÑпÑÑÐºÐ°Ñ . ÐÑо не вÑзÑÐ²Ð°ÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ Ð¿Ñоблем, Ñак как ÑвободнÑй диапазон динамиÑеÑки вÑÑиÑлÑеÑÑÑ Ð¿Ñи пеÑвом иÑполÑзовании hypopg подклÑÑением и ÑаÑÑиÑение Ð¼Ð¾Ð¶ÐµÑ ÑабоÑаÑÑ Ð½Ð° ÑезеÑвнÑÑ ÑеÑвеÑÐ°Ñ . Ðднако одновÑеменно Ð¼Ð¾Ð¶ÐµÑ ÑÑÑеÑÑвоваÑÑ Ð½Ðµ более 2500 гипоÑеÑиÑеÑÐºÐ¸Ñ Ð¸Ð½Ð´ÐµÐºÑов, и поÑле пÑевÑÑÐµÐ½Ð¸Ñ Ð¼Ð°ÐºÑималÑного колиÑеÑÑва обÑекÑов Ñоздание нового гипоÑеÑиÑеÑкого индекÑа ÑÑÐ°Ð½ÐµÑ Ð¾ÑÐµÐ½Ñ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ñм, пока не бÑÐ´ÐµÑ Ð²Ñзвана ÑÑнкÑиÑhypopg_reset().ÐÑли ÑÑи недоÑÑаÑки вÑзÑваÑÑ Ð¿ÑоблемÑ, можно вклÑÑиÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ. Тогда hypopg бÑÐ´ÐµÑ Ð·Ð°Ð¿ÑаÑиваÑÑ ÑеалÑнÑй иденÑиÑикаÑÐ¾Ñ Ð¾Ð±ÑекÑа, Ð´Ð»Ñ Ñего поÑÑебÑеÑÑÑ Ð¿Ð¾Ð»ÑÑаÑÑ Ð±Ð¾Ð»ÑÑе блокиÑовок, и не бÑÐ´ÐµÑ ÑабоÑаÑÑ Ð½Ð° ÑезеÑвнÑÑ ÑеÑвеÑÐ°Ñ , но Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ Ð¸ÑполÑзоваÑÑ Ð¿Ð¾Ð»Ð½Ñй диапазон иденÑиÑикаÑоÑов обÑекÑов.
ÐбÑаÑиÑе внимание, ÑÑо пеÑеклÑÑение ÑÑого паÑамеÑÑа не ÑÑебÑÐµÑ ÑбÑоÑа запиÑей.