Супер-юзер и создание типов данных...

Эридан
Дата: 15.03.2004 16:14:36
Пытался установить пакет tsearch2 на postgres7.3. Необходимый sql-файл содержит строки вида 'create function ...language C' Отсюда мораль, выполнять можно только из-под суперпользователя БД. Все таблицы, функции и типы создались, но мои приложения работают из-под обычного пользователя и не видят эти ресурсы. Пробовал сделать grant all ... to ... - эффект тот же.
Что делать???
И еще один ламерский вопрос: как разрешить другому юзеру пользоваться типом, созданным из-под суперпользователя?
nevermind
Дата: 07.05.2004 13:30:34
Та же проблема:
$ psql ftstest < tsearch2.sql
SET
BEGIN
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'pg_ts_dict_pkey' for table 'pg_ts_dict'
CREATE TABLE
ERROR: stat failed on file '$libdir/tsearch2': No such file or directory

Где определяется $libdir? Подскажите ламеру!!!
nevermind
Дата: 07.05.2004 14:06:51
Или вот так:
SET
BEGIN
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index 'pg_ts_dict_pkey' for table 'pg_ts_dict'
CREATE TABLE
ERROR: c: permission denied

Permission denied у него на libdir что ли? иил куда?! ПОМОГИТЕ ПЛЗ!!!!
nevermind
Дата: 07.05.2004 14:57:19
ТОВАРИЩИ!!!! Под суперпользователем все создалось.. так скажите же мне.... почему для него все нормально, а для обычных - борода!! Какие права им выставить нужно?!??!
LeXa NalBat
Дата: 07.05.2004 15:07:47
Какие права им выставить нужно?


В доке sql-createfunction.html написано: To be able to define a function, the user must have the USAGE privilege on the language.
LeXa NalBat
Дата: 07.05.2004 15:09:36
Может быть tsearch надо устанавливать из-под юзера postgres, а использовать - из-под любого юзера?
nevermind
Дата: 07.05.2004 15:28:56
Разобрался.... действительно ставить нужно из под суперюзера - иначе он файлы .so не видит.... ну а потом GRANT-ы дать всем кому надо... Спасибо!
nevermind
Дата: 08.05.2004 03:51:50
Эпопея продолжается... после успешной установки возникла необходимость добавить поддержку локали ru_RU.CP1251, которой-таки не оказалось в дефолтной поставке. Действуем по шаблону, получаем:

# select * from pg_ts_cfg;
     ts_name     | prs_name |    locale
-----------------+----------+--------------

default | default | C default_russian | default | ru_RU.KOI8-R simple | default | win_russian | default | ru_RU.CP1251 <=== добавленная конфигурация

Далее, добавляем свои словари:

# select * from pg_ts_dict where dict_name='ru_win_ispell' or dict_name='ispell_template' ;
dict_name | dict_init | dict_initoption | dict_lexize | dict_comment
-----------------+-----------+--------------------------------

ispell_template | 10895858 | 10895859 | ISpell interface. Must have .dict and .aff files ru_win_ispell | 10895858 | DictFile="/usr/local/pgsql/share/contrib/russian.dict", AffFile="/usr/local/pgsql/share/contrib/russian.aff", StopFile="/usr/local/pgsql/share/contrib/rus-win.stop" |10895859 | (записей: 2)

Как видно OID-ы совпадают (как и требуется в доках)... Словари помещены в /usr/local/pgsql/... с владельцем - суперпользователем базы (или какие там права должны быть?!)

Ну и наконец устанавливаем соответствие:

# select * from pg_ts_cfgmap where ts_name='win_russian';
   ts_name   |  tok_alias   |    dict_name
-------------+--------------+-----------------

win_russian | lhword | {simple} win_russian | lpart_hword | {simple} win_russian | lword | {simple} win_russian | url | {simple} win_russian | email | {simple} win_russian | file | {simple} win_russian | float | {simple} win_russian | host | {simple} win_russian | hword | {simple} win_russian | int | {simple} win_russian | part_hword | {simple} win_russian | sfloat | {simple} win_russian | uint | {simple} win_russian | uri | {simple} win_russian | version | {simple} win_russian | word | {simple} win_russian | nlhword | {ru_win_ispell} win_russian | nlword | {ru_win_ispell} win_russian | nlpart_hword | {ru_win_ispell}

Тестируем:
=> select set_curcfg('win_russian');
set_curcfg
------------

(1 запись) => select * from pg_ts_cfg where oid=show_curcfg(); ts_name | prs_name | locale -------------+----------+--------------
win_russian | default | ru_RU.CP1251 (1 запись) => select reset_tsearch(); NOTICE: TSearch cache cleaned reset_tsearch ---------------
(1 запись) => select * from ts_debug('Учебное пособие излагает основные сведения о порядке разработки и оформления управленческой документации'); ts_name | tok_type | description | token | dict_name | tsvector -------------+----------+----------------+----------------+--------
win_russian | nlword | Non-latin word | Учебное | {ru_win_ispell} | win_russian | nlword | Non-latin word | пособие | {ru_win_ispell} | 'пособие' win_russian | nlword | Non-latin word | излагает | {ru_win_ispell} | win_russian | nlword | Non-latin word | основные | {ru_win_ispell} | win_russian | nlword | Non-latin word | сведения | {ru_win_ispell} | win_russian | nlword | Non-latin word | о | {ru_win_ispell} | win_russian | nlword | Non-latin word | порядке | {ru_win_ispell} | win_russian | nlword | Non-latin word | разработки | {ru_win_ispell} | win_russian | nlword | Non-latin word | и | {ru_win_ispell} | win_russian | nlword | Non-latin word | оформления | {ru_win_ispell} | win_russian | nlword | Non-latin word | управленческой | {ru_win_ispell} | win_russian | nlword | Non-latin word | документации | {ru_win_ispell} | (записей: 12)

причем опытным путем проверено, что .stop файл работает (то есть если убрать оттуда например "и", то в результатах оно появится), а вот .dict и .aff судя по всему нет :(

ЕСТЬ ИДЕИ?!?!?

Спасибо!!!
Deimos(lt)
Дата: 09.02.2005 22:12:18
смотреть файл russian.aff материться, плеваться, плакать.
vavcgvavcg
Дата: 10.02.2005 18:34:16
Захотелось высказаться...
У меня tsearch2 используется только для индексации тех текстов,
которые уже обработаны - удалены "стопы", знаки препинания,
слова преведены к нижнему регистру и обработаны морфо-модулем,
т.е. находятся в нормальной форме.
Вообще, классная штука !