Intellect Board — cистема управления сайтомПостроение сайта на основе форума |
Intellect Board — cистема управления сайтом » Техническая поддержка версии 2.18 » PostgreSQL |
Правила раздела |
<<Назад Вперед>> | Страницы: 1 2 3 4 5 6 7 ... 13 14 15 16 17 18 Модераторы: aerograf, wsx | Печать |
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик Откуда: Москва Всего сообщений: 3299 Рейтинг пользователя: 70 Ссылка Дата регистрации на форуме: 29 сен. 2001 |
В итоге я написал вот так:
Вроде бы работает. Завтра доработаю запросы на создание таблиц, и выложу все это дело. А то, как выяснилось, в PostgreSQL в добавок ко всему еще и индексы создавать внутри CREATE TABLE нельзя, как это в MySQL делалось... ---
Спорить со мной по поводу того, что в IntB будет, а чего нет -- бесполезно! |
-KoT- |
Профиль | Сообщить модератору | Игнорировать
NEW! Сообщение отправлено: 14 мая 2006 9:48 Сообщение отредактировано: 14 мая 2006 10:25
И кроме всего прочего, есть различия в типах данных: мускульному BLOB примерно соответсвтует тип BYTEA, наиболее близким к TINYINT (однобайтовое целое) является SMALLINT (двухбайтовое целое), но предпочтительне использовать INT (INTEGER), BOOL и BIT в MySQL не соответствуют таким же в PostgreSQL Это то, что всмоинилось навскидку, есть и еще различия — нужно в доки заглянуть... Еще вспомнил — в Постгри есть типы SERIAL и BIGSERIAL - аналог INT (BIGINT) с флагом AUTOINCREMENT |
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик Откуда: Москва Всего сообщений: 3299 Рейтинг пользователя: 70 Ссылка Дата регистрации на форуме: 29 сен. 2001 |
Да, как оказалось, "не все так просто, как на самом деле". Вопрос такой: есть ли в Postgres FULLTEXT-поиск и как он делается? И как создаются FULLTEXT-индексы? ---
Спорить со мной по поводу того, что в IntB будет, а чего нет -- бесполезно! |
-KoT- |
Профиль | Сообщить модератору | Игнорировать
NEW! Сообщение отправлено: 20 мая 2006 21:17 Сообщение отредактировано: 20 мая 2006 21:35
В PostgreSQL мощный и гибкий полнотекстовый поиск с возмоностью подключения словарей, но реализуется в корне отличным то MySQL способом, индексов типа мускульного FULLTEXT, в Постгри не существует. Full-text-поиск обеспечивает модуль contrib/tsearch2, для поиска используются тополнительные поля типа tsvector. Например, создание таблицы prefix_Post, для полнотекстового поиска добаляется еще одно поле (fulltext_idx) типа tsvector:
Автозаполнение этого поля можно обеспечить разными способами, на мой взгляд, самый удобный — через триггер:
Поисковый запрос будет выглядеть примерно так:
P.S. Разумеется, модуль tsearch2 к моменту создания таблиц должен быть подключен к базе. |
wsx |
Хотелось бы отметить, дабы воизбежать путаницы, что SERIAL, BIGSERIAL и их наследники - являются не ТИПАМИ, а АлиАсами к INTEGER, но с небольшим "триггером", который создаёт требуемую секвенцию. ---
Не всё так просто, как на самом деле! |
-KoT- |
wsx написал: SERIAL, BIGSERIAL и их наследники - являются не ТИПАМИ, а АлиАсами к INTEGER, но с небольшим "триггером", который создаёт требуемую секвенцию. С точки зрения администратора БД - совершенно верно, но с точки зрения пользователя БД - это самый обыкновенный, кстати декларированный в описании, тип. Оффтопик: Дабы воизбежать путаницы , триггера не создается - создается sequense, при этом SERIAL эквивалентен типу INT со значением DEFAULT nextval('имя_sequense') XXXX Pro Поковырялся с русским поиском... В связи с тем, что не всегда возможно изменять конфигурацию 'default', поиск по словоформам может быть недоступен (но по абсолютно точному совпадению с шаблоном работать будет). В таком случае триггер не нужен, для автозаполнения поля типа tsvector после каждого INSERT'а добавлять запрос: UPDATE prefix_Post set fulltext_idx = to_tsvector('default_russian',coalesce(p_text,'') ||' '|| coalesce(p_title,'')) WHERE p_id=currval('prefix_Post_p_id_seq'); Такой запрос вернет документы с подсвеченными найденными словами, отсортированные по релевантности: SELECT headline(p_text, to_tsquery('default_russian', 'слово1 & слово2')), |
wsx |
-KoT- имелось ввиду то, что сам по себе алиас является триггером, который и создаёт например id INTEGER default nextval(sequence´ и саму секвенцию. Как отдельный ТИП - это имхо выносить не стоит, точнее не корректно, думаю это больше наследование от типа INTEGER. Хотя пофиг, главное суть ясна. ---
Не всё так просто, как на самом деле! |
-KoT- |
Оффтопик: wsx Согласен полностью Вариант с трггером,однако, предпочтительней, только при коннекте к базе нужно устанавливать конфигурацию 'derfault_russian', сразу после коннекта:
В этом случае в поисковых запросах конфигурацию можно вообще не указывать: |
-KoT- |
В итоге создание таблицы prefix_Post: CREATE TABLE prefix_Post ( P.S. Все проверялось клиентами psql и EMS PostgreSQL Manager, как будет работать с php — не знаю... |
4X_Pro
Руководитель Проекта
Настоящий Компьютерщик Откуда: Москва Всего сообщений: 3299 Рейтинг пользователя: 70 Ссылка Дата регистрации на форуме: 29 сен. 2001 |
По идее, запросы от клиента зависеть не должны... Вопрос: а как быть с запросами вот такого вида:
PostgreSQL начинает ругаться на то, что таблицы из FROM( в )LEFT JOIN использовать нельзя: ERROR: invalid reference to FROM-clause entry for table "u" ПОДСКАЗКА: There is an entry for table "u", but it cannot be referenced from this part of the query. ---
Спорить со мной по поводу того, что в IntB будет, а чего нет -- бесполезно! |
<<Назад Вперед>> | Страницы: 1 2 3 4 5 6 7 ... 13 14 15 16 17 18 Модераторы: aerograf, wsx | Печать |
Intellect Board — cистема управления сайтом » Техническая поддержка версии 2.18 » PostgreSQL |
1 посетитель просмотрел эту тему за последние 10 минут |
В том числе: 1 гость, 0 скрытых пользователей |
Последние | |
Ограничение доступа не отображаются разделы Архив версий Установка стиля на Intellect Board 2.22 Завершилась работа над новой версией 3.00 |
Самые активные 5 тем | |