powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблема с индексом на базе pg_trgm_ops
19 сообщений из 19, страница 1 из 1
Проблема с индексом на базе pg_trgm_ops
    #38458899
Stan_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для меня интересной и полезной оказалась вот эта тема: 14987498

Я начал делать что-то подобное для себя, и все было хорошо до какго-то момента. У меня удалось повесить соответствующий индекс на одну таблицу, и все работает как надо. Но сегодня начал вешать на вторую, и столкнулся с проблемой, толком не описанной в гуггле. :(

Код: plsql
1.
2.
CREATE INDEX cache_names_name_idx ON cache.names USING gin(lower(name) gin_trgm_ops);
ERROR:  operator class "gin_trgm_ops" does not exist for access method "gin"



Расширение, естественно, активировано

Код: plsql
1.
2.
create extension pg_trgm;
ERROR:  extension "pg_trgm" already exists



Подтверждение, что оно работает, видно из этого:

Код: plsql
1.
2.
3.
4.
drop extension pg_trgm;
ERROR:  cannot drop extension pg_trgm because other objects depend on it
DETAIL:  index cache.addrobj_name_idx depends on operator class cache.gin_trgm_ops for access method gin
HINT:  Use DROP ... CASCADE to drop the dependent objects too.



В чем может быть проблема? Ума не приложу. :(
...
Рейтинг: 0 / 0
Проблема с индексом на базе pg_trgm_ops
    #38459137
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stan_1Для меня интересной и полезной оказалась вот эта тема: 14987498

Я начал делать что-то подобное для себя, и все было хорошо до какго-то момента. У меня удалось повесить соответствующий индекс на одну таблицу, и все работает как надо. Но сегодня начал вешать на вторую, и столкнулся с проблемой, толком не описанной в гуггле. :(

Код: plsql
1.
2.
CREATE INDEX cache_names_name_idx ON cache.names USING gin(lower(name) gin_trgm_ops);
ERROR:  operator class "gin_trgm_ops" does not exist for access method "gin"



Расширение, естественно, активировано

Код: plsql
1.
2.
create extension pg_trgm;
ERROR:  extension "pg_trgm" already exists



Подтверждение, что оно работает, видно из этого:

Код: plsql
1.
2.
3.
4.
drop extension pg_trgm;
ERROR:  cannot drop extension pg_trgm because other objects depend on it
DETAIL:  index cache.addrobj_name_idx depends on operator class cache.gin_trgm_ops for access method gin
HINT:  Use DROP ... CASCADE to drop the dependent objects too.



В чем может быть проблема? Ума не приложу. :(

вы чейто с search_path похоже игрались и поставили extension в схему cache (судя по
"operator class cache.gin_trgm_ops for access method gin")
а теперь пытаетесь сделать индекс не имея этой схемы в search_path

попробуйте
CREATE INDEX cache_names_name_idx ON cache.names USING gin(lower(name) cache.gin_trgm_ops);

или если не сработает то
set search_path to cache;
CREATE INDEX cache_names_name_idx ON cache.names USING gin(lower(name) gin_trgm_ops);

(но пологике оба метода должны работать).
...
Рейтинг: 0 / 0
Проблема с индексом на базе pg_trgm_ops
    #38459203
Stan_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Bogukвы чейто с search_path похоже игрались и поставили extension в схему cache (судя по
"operator class cache.gin_trgm_ops for access method gin")
а теперь пытаетесь сделать индекс не имея этой схемы в search_path

попробуйте
CREATE INDEX cache_names_name_idx ON cache.names USING gin(lower(name) cache.gin_trgm_ops);

или если не сработает то
set search_path to cache;
CREATE INDEX cache_names_name_idx ON cache.names USING gin(lower(name) gin_trgm_ops);

(но пологике оба метода должны работать).

Первый метод:

Код: plsql
1.
Error : ERROR:  operator class "cache.gin_trgm_ops" does not exist for access method "gin"



Второй метод:

Код: plsql
1.
Error : ERROR:  operator class "cache.gin_trgm_ops" does not exist for access method "gin"



Но при этом, если раньше выполнение и ошибка команды были мгновенными, то сейчас (база заполнена на 500-600 тыс. записей), после запуска и до момента получения ответа проходит около 10-12 секунд.
...
Рейтинг: 0 / 0
Проблема с индексом на базе pg_trgm_ops
    #38459226
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stan_1,

уже интересно...

1)что говорит
Код: plsql
1.
select pg_opclass.*,pg_namespace.* from pg_opclass join pg_namespace on pg_namespace.oid=opcnamespace where opcname='gin_trgm_ops';



2)вы из под какого пользователя пробуете индекс создать? из под postgres ?
...
Рейтинг: 0 / 0
Проблема с индексом на базе pg_trgm_ops
    #38459265
Stan_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim BogukStan_1,

уже интересно...

1)что говорит
Код: plsql
1.
select pg_opclass.*,pg_namespace.* from pg_opclass join pg_namespace on pg_namespace.oid=opcnamespace where opcname='gin_trgm_ops';



2)вы из под какого пользователя пробуете индекс создать? из под postgres ?

Код: plaintext
1.
2.
3.
4.
5.
+-----------+--------------+--------------+----------+-----------+-----------+------------+------------+---------+----------+--------+
| opcmethod | opcname      | opcnamespace | opcowner | opcfamily | opcintype | opcdefault | opckeytype | nspname | nspowner | nspacl |
+-----------+--------------+--------------+----------+-----------+-----------+------------+------------+---------+----------+--------+
| 2742      | gin_trgm_ops | 18026        | 16384    | 18132     | 25        | f          | 23         | fias    | 16389    | NULL   |
+-----------+--------------+--------------+----------+-----------+-----------+------------+------------+---------+----------+--------+
1 rows in set (2.46 sec)

Создать индекс пробовал (с одинаково негативным результатом) из-под:
- владельца таблицы (owner) причем со всеми включенными правами
- pgadmin через web-консольку
- postgres

Сейчас еще раз зашел в админку, из-за под владельца таблицы, и попробовал запросы.
CREATE INDEX cache_names_name_idx ON cache.names USING gin(lower(name) cache.gin_trgm_ops); - отлуп сразу
CREATE INDEX cache_names_name_idx ON cache.names USING gin(lower(name) gin_trgm_ops); - спустя примерно 20 секунд.

Но ошибка одна и таже.
...
Рейтинг: 0 / 0
Проблема с индексом на базе pg_trgm_ops
    #38459267
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stan_1Maxim BogukStan_1,

уже интересно...

1)что говорит
Код: plsql
1.
select pg_opclass.*,pg_namespace.* from pg_opclass join pg_namespace on pg_namespace.oid=opcnamespace where opcname='gin_trgm_ops';



2)вы из под какого пользователя пробуете индекс создать? из под postgres ?

Код: plaintext
1.
2.
3.
4.
5.
+-----------+--------------+--------------+----------+-----------+-----------+------------+------------+---------+----------+--------+
| opcmethod | opcname      | opcnamespace | opcowner | opcfamily | opcintype | opcdefault | opckeytype | nspname | nspowner | nspacl |
+-----------+--------------+--------------+----------+-----------+-----------+------------+------------+---------+----------+--------+
| 2742      | gin_trgm_ops | 18026        | 16384    | 18132     | 25        | f          | 23         | fias    | 16389    | NULL   |
+-----------+--------------+--------------+----------+-----------+-----------+------------+------------+---------+----------+--------+
1 rows in set (2.46 sec)

Создать индекс пробовал (с одинаково негативным результатом) из-под:
- владельца таблицы (owner) причем со всеми включенными правами
- pgadmin через web-консольку
- postgres

Сейчас еще раз зашел в админку, из-за под владельца таблицы, и попробовал запросы.
CREATE INDEX cache_names_name_idx ON cache.names USING gin(lower(name) cache.gin_trgm_ops); - отлуп сразу
CREATE INDEX cache_names_name_idx ON cache.names USING gin(lower(name) gin_trgm_ops); - спустя примерно 20 секунд.

Но ошибка одна и таже.

всетаки для интереса попробуйтей от postgres сделать
CREATE INDEX cache_names_name_idx ON cache.names USING gin(lower(name) fias.gin_trgm_ops);

если не получится то что говорит
\dn+ fias
...
Рейтинг: 0 / 0
Проблема с индексом на базе pg_trgm_ops
    #38459271
Stan_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk
всетаки для интереса попробуйтей от postgres сделать
CREATE INDEX cache_names_name_idx ON cache.names USING gin(lower(name) fias.gin_trgm_ops);

если не получится то что говорит
\dn+ fias

Ошибся, из-под postgres не пробовал. Этот юзер знает только админ. У меня самый-самый юзер со всеми правами - pgadmin.

Адмнистратор появится - попробую из-под юзера postgres, но созданный индекс тогда - точно не из под него создавался.
...
Рейтинг: 0 / 0
Проблема с индексом на базе pg_trgm_ops
    #38459273
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stan_1Maxim Bogukвсетаки для интереса попробуйтей от postgres сделать
CREATE INDEX cache_names_name_idx ON cache.names USING gin(lower(name) fias.gin_trgm_ops);

если не получится то что говорит
\dn+ fias

Ошибся, из-под postgres не пробовал. Этот юзер знает только админ. У меня самый-самый юзер со всеми правами - pgadmin.

Адмнистратор появится - попробую из-под юзера postgres, но созданный индекс тогда - точно не из под него создавался.

1)сделайте \dn+ fias

2)сделайте \du+ [владелец таблицы cache.names]

3)сделайте \du+ pgadmin

4)сделайте \dx

5)сделайте show search_path; из под [владелец таблицы cache.names]

и покажите это все...

и попробуйте от имени владельца таблицы сделать
CREATE INDEX cache_names_name_idx ON cache.names USING gin(lower(name) fias.gin_trgm_ops);
...
Рейтинг: 0 / 0
Проблема с индексом на базе pg_trgm_ops
    #38459280
Stan_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk
и попробуйте от имени владельца таблицы сделать
CREATE INDEX cache_names_name_idx ON cache.names USING gin(lower(name) fias.gin_trgm_ops);

О!!! Вот это сработало. 40 секунд и индекс создан. :)

Получается, что само расширение создалось только для namespace fias?
...
Рейтинг: 0 / 0
Проблема с индексом на базе pg_trgm_ops
    #38459286
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stan_1Maxim Bogukи попробуйте от имени владельца таблицы сделать
CREATE INDEX cache_names_name_idx ON cache.names USING gin(lower(name) fias.gin_trgm_ops);

О!!! Вот это сработало. 40 секунд и индекс создан. :)

Получается, что само расширение создалось только для namespace fias?

любое расширение ставится в первую схему из тех что указаны в search_path
если у вас там на первом месте была схема fias то оно там и создалось
и теперь или его там постоянно указывать или добавить fias в search_path всем пользователям...

PS: мое мнение что правильно расширения ставить в схему public и иметь ее (схему public) в search_path у всех пользователей первой (для простоты) или последней (наиболее безопасный вариант если есть всякие ограничения по правам на схемы).
...
Рейтинг: 0 / 0
Проблема с индексом на базе pg_trgm_ops
    #38459292
Stan_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim BogukStan_1пропущено...


О!!! Вот это сработало. 40 секунд и индекс создан. :)

Получается, что само расширение создалось только для namespace fias?

любое расширение ставится в первую схему из тех что указаны в search_path
если у вас там на первом месте была схема fias то оно там и создалось
и теперь или его там постоянно указывать или добавить fias в search_path всем пользователям...

PS: мое мнение что правильно расширения ставить в схему public и иметь ее (схему public) в search_path у всех пользователей первой (для простоты) или последней (наиболее безопасный вариант если есть всякие ограничения по правам на схемы).

Понял. Учту на будущее. Спасибо большое!!!!!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Проблема с индексом на базе pg_trgm_ops
    #40092296
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет. Прошу прощения за внезапный UP. У меня тот-же самый вопрос. Куда поставилось расширение? И почему мне недоступно?

Under superuser:
Код: sql
1.
2.
3.
4.
5.
6.
$ sudo -u postgres psql
psql (12.8 (Ubuntu 12.8-0ubuntu0.20.04.1))
Type "help" for help.

postgres=# CREATE EXTENSION pg_trgm;
ERROR:  extension "pg_trgm" already exists



Under me:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
$ psql -d dht -U mayton
psql (12.8 (Ubuntu 12.8-0ubuntu0.20.04.1))
Type "help" for help.


dht=> \d+ words
                                  Table "public.words"
 Column | Type | Collation | Nullable | Default | Storage  | Stats target | Description 
--------+------+-----------+----------+---------+----------+--------------+-------------
 word   | text |           |          |         | extended |              | 
Tablespace: "trigram_space"
Access method: heap


dht=> \dn+ dht
                List of schemas
 Name | Owner | Access privileges | Description 
------+-------+-------------------+-------------
(0 rows)

dht=> \du+ mayton
                  List of roles
 Role name | Attributes | Member of | Description 
-----------+------------+-----------+-------------
 mayton    | Create DB  | {}        | 

dht=> \du+ pgadmin
                  List of roles
 Role name | Attributes | Member of | Description 
-----------+------------+-----------+-------------

dht=> \dx
                 List of installed extensions
  Name   | Version |   Schema   |         Description          
---------+---------+------------+------------------------------
 plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural language
(1 row)

dht=> show search_path; 
   search_path   
-----------------
 "$user", public
(1 row)

dht=> CREATE INDEX words_idx ON words USING gin(lower(word) dht.gin_trgm_ops); 
ERROR:  schema "dht" does not exist
dht=> 
dht=> CREATE INDEX words_idx ON words USING gin(lower(word) gin_trgm_ops); 
ERROR:  operator class "gin_trgm_ops" does not exist for access method "gin"
...
Рейтинг: 0 / 0
Проблема с индексом на базе pg_trgm_ops
    #40092305
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
$ sudo -u postgres psql
psql (12.8 (Ubuntu 12.8-0ubuntu0.20.04.1))
Type "help" for help.

postgres=# CREATE EXTENSION pg_trgm;
ERROR:  extension "pg_trgm" already exists


Здесь подключаетесь к базе данных postgres и в этой БД расширение установлено.

Код: sql
1.
$ psql -d dht -U mayton

А здесь подключаетесь к БД dht и судя по
Код: sql
1.
2.
3.
4.
5.
6.
dht=> \dx
                 List of installed extensions
  Name   | Version |   Schema   |         Description          
---------+---------+------------+------------------------------
 plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural language
(1 row)


в этой БД расширение не установлено.
...
Рейтинг: 0 / 0
Проблема с индексом на базе pg_trgm_ops
    #40092309
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Все верно. Но у меня (у пользователя mayton) нет прав на установку пакетов. И слава богу. И не нужны сильно.

Вот ведь есть-же стандартный процесс когда не пользователь ставит пакет? А пользователю ставят админы.

Такое реально?
...
Рейтинг: 0 / 0
Проблема с индексом на базе pg_trgm_ops
    #40092328
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.
...
Рейтинг: 0 / 0
Проблема с индексом на базе pg_trgm_ops
    #40092335
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Да. Все верно. Но у меня (у пользователя mayton) нет прав на установку пакетов. И слава богу. И не нужны сильно.

Вот ведь есть-же стандартный процесс когда не пользователь ставит пакет? А пользователю ставят админы.

Такое реально?


Реально только не понятно как относится к исходному вопросу.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Проблема с индексом на базе pg_trgm_ops
    #40092339
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо. Тогда спрошу вопрос. Решение которое было приведено выше для Stan - мне не подошло.

Код: sql
1.
2.
dht=> CREATE INDEX words_idx ON words USING gin(lower(word) gin_trgm_ops); 
ERROR:  operator class "gin_trgm_ops" does not exist for access method "gin"



Подскажите если вы знаете чего не хватает?
...
Рейтинг: 0 / 0
Проблема с индексом на базе pg_trgm_ops
    #40092341
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Хорошо. Тогда спрошу вопрос. Решение которое было приведено выше для Stan - мне не подошло.

Код: sql
1.
2.
dht=> CREATE INDEX words_idx ON words USING gin(lower(word) gin_trgm_ops); 
ERROR:  operator class "gin_trgm_ops" does not exist for access method "gin"



Подскажите если вы знаете чего не хватает?


Не хватает установленного расширения pg_trgm в базе dht.


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Проблема с индексом на базе pg_trgm_ops
    #40092348
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О спасибо. Теперь понял.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблема с индексом на базе pg_trgm_ops
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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