Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / PostgreSQL |
![]() ![]() |
Shweik Member Откуда: Сообщений: 1742 |
В этом топике будем коллекционировать Q-A нашего форума. Cначала я выполню то, что хотелось еще в 2005 - важные для читателя FAQ ссылки. прим. мод. : выложил , но сам по привычке читаю оригинал, что и вам советую. Дока по 8.4 собранная в CHM 1. Русский перевод официального FAQ 2.Неофициальный перевод FAQ по Win32 порту PostgreSQL 3. PostgreSQL General Bits - как-бы подбитые Elein Mustain итоги обсуждений в рассылке PostgreSQL). FAQ по установке Постгреса под Win32 и другие документы Как настроить полнотекстовый поиск (contrib/tsearch2) c поддержкой cp1251 Предложил aTz (msk) - инфа касается в основном тех кто вынужден пользоваться PG 7.x. Правильность ответов не гарантирована ,а большинство ответов ориентирована на версии >8.1.2 Дополнения и поправки приветствуются. ----------------------------------------Приступим--------------------------------------------------- Прежде всего переменные окружения $PGDATA="/usr/mnt/ata04/pgsqldata"; это путь к кластеру с данными , постгрес там же хранит файлы postgresql.conf и pg_hba.conf $PGBIN="/usr/local/pgsql/bin" - каталог исполняемых файлов постгреса. В Вашем случае это могут быть скажем "С:\Program Files\PostgreSQL\data" и "С:\Program Files\PostgreSQL\bin" соответственно. 1.Q: Как избавиться от "иероглифов" в окне терминала постгреса под Win32 A: Просто запишите в файл c:\Documents and Settings\<имяпользователя>\Application Data\postgresql\psqlrc.conf строчку \! chcp 1251 2.Q: Немогу присоединиться к постгресу по tcp_ip A. Для версий >=8.0 Для версий <8.0 вместо listen_addresses нужно установить переменную tcpip_socket = true Формат pg_hba тоже изменился в 8.0 Внимательно читаем комментарии в этом файле. 3. Q: А я вот для Oracle/MS/My/... использовал классный инструмент XXX, а есть ли такое же но под PostgreSQL? A: Под PostgreSQL есть следующий инструментарий: a. PgAdminIII - лучше всего для администрирования. b. EMS - самый лучший для программирования, и базового администрирования. c. phpPgAdmin - как они себя определяют, подходит для DBA, ньюбов и хостеров. d. Очередной коммерческий вариант админской тулзы триален ,сыроват и интересен пока что разве что возможностью онлайн мониторинга стата f. Aqua Data Studio - админская тулза поддерживает в также PostgresSQL. Ранние версии доступны бесплатно. 5. Q: Как поставить PostgreSQL на fat32? A: Оно Вам нужно? Точно? А глюков не боитесь? А потери данных? Лучше - не ставить. Или найти раздел с NTFS и поставить туда. Или сконвертить раздел под NTFS. 6. Q: Как поставить PostgreSQL на другой раздел? A: При установке инсталлятором, в окне выбора компонент указать директорию с данными на другом диске. 7. Q: Да мне плевать на данные, но очень нужно поставить PostgreSQL на fat32! Как? A: Ну, если очень нужно, то: 1. Поставить PostgreSQL или инсталлятором или просто бинарники. 2. Должен быть пользователь от имени которого будет работать серверный процесс PostgreSQL (далее имя пользователя - postgres). Этого пользователя может создать и инсталлятор, можно его создать и руками. Пользователь не должен входить в группу администраторов и ИМХО даже не опытных пользователей. 3. Дать полные права на папку с данными пользователю PostgreSQL (postgresql). 3. Создать базу с помощью initdb. 4. Зарегистрировать сервис c помощью pg_ctl, например: pg_ctl.exe register -N pgsql-8.1 -P 000000 -U postgres -D "c:\Program Files\PostgresSQL\8.1\data"5. Запустить сервис. Есть более простой путь. При SilentInstall PostgreSQL не ругается на FAT32. Соответсвенно читаем и ставим. 8. Q.У меня МЕГАСЕРВЕР, но PostgresSQL работает ужасно! Тормоза жуткие! Сделал все что мог, но не помогло! В чем грабли? A. Хотете получить ответ - заполните форму: 1. Версия PG? ОС? 2. Какие настройки? Особенно интересуют изменения в файле postgresql.conf 3. Есть ли еще что-то активно работающее на этой машине? 4. Тормоза на каких запросах? Каков объем данных? 5. А что с дисковой подсистемой? 6. А с CPU? 7. И к тормозящим запросам EXPLAIN ANALYZE? 8. Когда последний раз делался VACUUM FULL ANALYZE? 9. Q Я создал таблицу, поле, представление... пытаюсь из него выбрать, а оно мне говорит что не найдено! A В PostgreSQL важно наличие кавычек при указании имен сущностей и полей. Есть два правила: 1. Все что указывается в кавычках - считается регистрозависимым и соответсвенно создается, выбирается и т.д. 2. Все что не указывается в кавычках считается написанным в нижнем регистре. И еще PostgreSQL в части имен является регистрозависимой СУБД. Примеры: "Table"<>Table, потому, что Table=table (правило 2), а "Table"<>table (правило 1). TaBlE=tAblE, потому что и то и другое равно table (правило 2). Отсюда вывод: "если при создании имена указаны в кавычках, и используются большие буквы - не удивляйтесь" ![]() Andrey Daeron 10. Q. Как мне переключиться с одной базы на другую? Существует ли аналог "use dbname" A.В PG после установки коннекта нельзя сменить БД. нужно коннект разорвать, а потом соединиться с новой БД. или (если в запросе) использовать dblink 11. Q. Как посмотреть план запроса внутри функции? A. На сегодняшний момент способов посмотреть план выполнения функции нет. 12. Q. Delphi + PostgreSQL Что есть для работы? A Рекомендую компоненты прямого доступа (обе библиотеки используют только libpq.dll) 1) PostgresDAC 2) ZeosLib 13. Q А что вообще есть кроме каталога дополнений contrib? A Прежде всего замечательные ресурсы PgFoundry Gborg 14. Q Правда ли что в PostgreSQL скорость выполнения транзакции (множество операций INSERT) не зависит от размеров транзакции? A (с)tadmin: На практике размер транзакции сложно влияет на скорость исполнения и зависит многих факторов: 1) помещается ли размер транзакции в ОЗУ? 2) помещается ли размер транзакции в кеш процессора (1-2-6 мб)? 3) нет ли плохого кода в самом постгресе, который приводит к скорости исполнения порядка O(N^2)? На обычных задачах, ограничением является п 2). Как только транзакция (изоляция индексов и таблиц) начинается вытеснятся из кеша процессора, тут же появляется зависимость хуже чем O(N) На моей практике (импорт больших объемов данных со сложными вставками во множество таблиц), есть оптимальный размер транзакции. При переходе с 7ки на 8ку на одном железе оптимальный размерм транзакции вместо 20 записей стал 50. При переходе со старого Xeon на Opteron 852 опт. размер стал 80-90. 15. QКак установить pl/Perl(win 32)? A(с)ОКТОГЕН 1) Надо установить сам перл. Например, вот этот 2) Прописать "переменную среды path" , например, у меня так C:\Perl\site\bin;C:\Perl\bin;C:\Program Files\PostgreSQL\8.4\lib; 3) Устанавливаем перл в базе -- недоверенный CREATE PROCEDURAL LANGUAGE 'plperlu' HANDLER plperl_call_handler VALIDATOR plperl_validator; ALTER LANGUAGE plperlu OWNER TO postgres; -- доверенный CREATE TRUSTED PROCEDURAL LANGUAGE "plperl" HANDLER "plperl_call_handler" VALIDATOR "plperl_validator";4) Наслаждаемся перлом. QЯ перешёл из MySQL, есть ли переменные сессии и как их применить? A(с)ОКТОГЕН Если postgresql.conf в самом конце в секции #--------------------------------------------------------------------------- # CUSTOMIZED OPTIONS #--------------------------------------------------------------------------- custom_variable_classes = '' # list of custom variable class names заменить к примеру на custom_variable_classes = 'something' И перегрузить постгрес то Потом можно определять свои переменные уровня сессии ( соединения с БД) Например так : set something.hernya='lalala'; show something.hernya; или тоже самое в SQL select set_config('something.hernya','lalala',false) select current_setting('something.hernya') Важно :в переменной такого рода можно хранить только текст- но при этом всегда можно текстовое значение привести к нужному типу.. Сообщение было отредактировано: 20 янв 11, 22:51 |
13 фев 07, 15:59 [3778919] Ответить | Цитировать Сообщить модератору |
Andrey Daeron Member Откуда: Киев Сообщений: 1027 |
Да ничего, я еще напишу. ![]() Главное что бы таки помагало людям ![]() ЗЫ Если бы кто взялся толково расписать вопросы по: 1. Партиционирование 2. Значения и их анализ в EXPLAIN ANALYZE 3. Использование индексов (легендарный вопрос про "неиспользовние индексов в 7.х") 4. Использование SET bitmap_scan , SET seq_scan и прочих для исследования запросов. 5. Настройка и ведение профайлинги (через лог и включение опций). |
||
13 фев 07, 21:14 [3780777] Ответить | Цитировать Сообщить модератору |
Andrey Daeron Member Откуда: Киев Сообщений: 1027 |
Мда, чет-то сегодня как не вопрос, так ФАК Q: А где бы мне найти доки по PostgreSQL? A: Тут все просто: 1. EN Главная дока по PostgreSQL 2. RU http://www.computerbooks.ru/books/Programming/Book-SQL/Vved/Index0.htm 3. ? Sams.PostgreSQL.2nd.Edition.Jul.2005.chm. Напрямую не качается, но догадаться несложно. 4. RU Дока на русском 5. EN http://www.postgresql.org/files/documentation/books/aw_pgsql/index.html 6. EN http://www.commandprompt.com/ppbook 7. RU http://predpinimatel-cd.com.ru/book/Programming/SQL/Menu.html 8. Бумага: 1. PostgreSQL. Руководство разработчика и администратора. Э. Гешвинде, Г-Ю. Шениг. 2. Ну, и еще, тех же авторов: Разработка Web-приложений на PHP и PostgreSQL. Издательство Diasoft, 2002 & 2003 гг. |
14 фев 07, 18:34 [3786596] Ответить | Цитировать Сообщить модератору |
ZemA Member Откуда: Тюмень Сообщений: 284 |
как-то так create table some_table ( f1 int4 primary key, f2 text, f3 text ); insert into some_table values (1, 'qwerty', 'йцукен'); insert into some_table values (2, 'asdfgh', 'фывапр'); create function foo(bool) returns setof record as ' declare x alias for $1; rec record; begin if x then for rec in select f1, f2, f3 from some_table loop return next rec; end loop; else for rec in select f1, f2 from some_table loop return next rec; end loop; end if; return; end; ' language plpgsql; select * from foo(true) as (f1 int4, f2 text, f3 text); f1 | f2 | f3 ----+--------+-------- 1 | qwerty | йцукен 2 | asdfgh | фывапр select * from foo(false) as (f1 int4, f2 text); f1 | f2 ----+-------- 1 | qwerty 2 | asdfgh |
||
22 фев 07, 07:47 [3819672] Ответить | Цитировать Сообщить модератору |
Serik Akhmetov Member Откуда: Сообщений: 565 |
Как правильно задавать вопросы |
1 мар 07, 06:53 [3846093] Ответить | Цитировать Сообщить модератору |
Andrey Daeron Member Откуда: Киев Сообщений: 1027 |
Настройка PG за 5 минут |
25 янв 08, 08:44 [5200998] Ответить | Цитировать Сообщить модератору |
st_serg Member Откуда: Москва Сообщений: 591 |
Вот примерный сценарий простейшего бекапа, однако не советую использовать простейший вариант в продакшене. Неплохо было бы команду для архивирования/восстановления логов, сделать более умной. Да и некоторые caveats надо обходить (напр. создание новых табличных пространств), вобщем документацию все равно прочитать надо :) 2модератор, честно говоря не знаю подходит мой пост под faq иль нет, так что прошу прощения на всякий случай Строки начинающиеся с символа # (решетка) - мои комментарии Active code page: 1251 c:\home\pg>cmd.exe Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. # # Исходное состояние: # Дистрибутив pg 8.3.1 распакован в c:\home\pg\8.3.1 # Файл 8.3.1-cmd.bat устанавливает переменные окружения и запускает cmd.exe # c:\home\pg>dir Volume in drive C has no label. Volume Serial Number is 4CA6-478A Directory of c:\home\pg 05.09.2008 16:41 <DIR> . 05.09.2008 16:41 <DIR> .. 05.09.2008 16:40 <DIR> 8.3.1 05.09.2008 16:08 69 8.3.1-cmd.bat 1 File(s) 69 bytes 3 Dir(s) 16 775 454 720 bytes free c:\home\pg>type 8.3.1-cmd.bat @chcp 1251 @set path=%cd%\8.3.1\bin;%cd%\8.3.1\lib;%path% cmd.exe # # Инициализируем кластер (часть сообщений поскипана) # c:\home\pg>initdb -D data [skipped] Success. You can now start the database server using: "postgres" -D "data" or "pg_ctl" -D "data" -l logfile start # # сохраним дефолтную версию конфига # c:\home\pg>copy data\postgresql.conf data\postgresql.conf.orig 1 file(s) copied. # # Отредактируем конфиг, включив WAL # c:\home\pg>notepad data\postgresql.conf c:\home\pg>fc data\postgresql.conf.orig data\postgresql.conf Comparing files DATA\postgresql.conf.orig and DATA\POSTGRESQL.CONF ***** DATA\postgresql.conf.orig #archive_mode = off # allows archiving to be done # (change requires restart) #archive_command = '' # command to use to archive a logfile segment #archive_timeout = 0 # force a logfile segment switch after this ***** DATA\POSTGRESQL.CONF archive_mode = on # allows archiving to be done # (change requires restart) archive_command = 'copy %p c:\\home\\pg\\xlogs\\%f' # command to use to archive a logfile segment #archive_timeout = 0 # force a logfile segment switch after this ***** # # Создаем директорию куда будут складываться WALы # c:\home\pg>mkdir xlogs # # Запускаем пг # c:\home\pg>pg_ctl start -D data server starting c:\home\pg>LOG: система была отключена: 2008-09-05 16:42:18 MSD LOG: database system is ready to accept connections LOG: autovacuum launcher started # # Запускаем пг # и начинаем бекап # c:\home\pg>psql -U sotinov Active code page: 1251 version | now -----------------------------------------------------+---------------------------- PostgreSQL 8.3.1, compiled by Visual C++ build 1400 | 2008-09-05 16:46:55.957+04 (1 запись) Welcome to psql 8.3.1, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit postgres=# select pg_start_backup('label'); pg_start_backup ----------------- 0/494D68 (1 запись) postgres=# \q # # Создаем резервную копию файлов данных # c:\home\pg>mkdir data-bak c:\home\pg>xcopy /E data data-bak [skipped] 431 File(s) copied # # Выключаем режим бекапа # c:\home\pg>psql -U sotinov Active code page: 1251 version | now -----------------------------------------------------+---------------------------- PostgreSQL 8.3.1, compiled by Visual C++ build 1400 | 2008-09-05 16:51:44.836+04 (1 запись) Welcome to psql 8.3.1, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit postgres=# select pg_stop_backup(); pg_stop_backup ---------------- 0/494DD0 (1 запись) postgres=# \q # # Как видно из вывода dir WAL был успешно скоприрован # c:\home\pg>dir xlogs\* Volume in drive C has no label. Volume Serial Number is 4CA6-478A Directory of c:\home\pg\xlogs 05.09.2008 16:51 <DIR> . 05.09.2008 16:51 <DIR> .. 05.09.2008 16:42 16 777 216 000000010000000000000000 05.09.2008 16:51 235 000000010000000000000000.00494D68.backup 2 File(s) 16 777 451 bytes 2 Dir(s) 16 698 986 496 bytes free # # Имитируем работу с базой # c:\home\pg>psql -U sotinov Active code page: 1251 version | now -----------------------------------------------------+--------------------------- PostgreSQL 8.3.1, compiled by Visual C++ build 1400 | 2008-09-05 16:52:41.14+04 (1 запись) Welcome to psql 8.3.1, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit postgres=# create table tab1 as select * from pg_type; SELECT ^ postgres=# insert into tab1 select * from tab1; INSERT 0 269 postgres=# insert into tab1 select * from tab1; INSERT 0 538 postgres=# insert into tab1 select * from tab1; INSERT 0 1076 postgres=# insert into tab1 select * from tab1; INSERT 0 2152 postgres=# insert into tab1 select * from tab1; INSERT 0 4304 postgres=# insert into tab1 select * from tab1; INSERT 0 8608 postgres=# insert into tab1 select * from tab1; INSERT 0 17216 postgres=# insert into tab1 select * from tab1; INSERT 0 34432 postgres=# insert into tab1 select * from tab1; INSERT 0 68864 postgres=# \q # # Колво WALов увеличилось # c:\home\pg>dir xlogs\* Volume in drive C has no label. Volume Serial Number is 4CA6-478A Directory of c:\home\pg\xlogs 05.09.2008 16:53 <DIR> . 05.09.2008 16:53 <DIR> .. 05.09.2008 16:42 16 777 216 000000010000000000000000 05.09.2008 16:51 235 000000010000000000000000.00494D68.backup 05.09.2008 16:53 16 777 216 000000010000000000000001 3 File(s) 33 554 667 bytes 2 Dir(s) 16 624 394 240 bytes free # # Теперь восстановим нашу резервную копию # Выключаем текущую базу # c:\home\pg>pg_ctl stop -D data waiting for server to LOG: получен запрос об умном осshut down...танове .LOG: autovacuum launcher shutting down LOG: отключение в процессе ..LOG: система отключена готово server stopped # # Удалим ненужные файлы # Отключим в конфиге резервной копии WAL # c:\home\pg>del data-bak\postmaster.pid c:\home\pg>del data-bak\postgresql.conf.orig c:\home\pg>copy data-bak\postgresql.conf data-bak\postgresql.conf.orig 1 file(s) copied. c:\home\pg>notepad data-bak\postgresql.conf c:\home\pg>fc data-bak\postgresql.conf.orig data-bak\postgresql.conf Comparing files DATA-BAK\postgresql.conf.orig and DATA-BAK\POSTGRESQL.CONF ***** DATA-BAK\postgresql.conf.orig archive_mode = on # allows archiving to be done # (change requires restart) archive_command = 'copy %p c:\\home\\pg\\xlogs\\%f' # command to use to archive a logfile segment #archive_timeout = 0 # force a logfile segment switch after this ***** DATA-BAK\POSTGRESQL.CONF archive_mode = off # allows archiving to be done # (change requires restart) archive_command = '' # command to use to archive a logfile segment #archive_timeout = 0 # force a logfile segment switch after this ***** # # Логи в резервной копии нам не нужны # c:\home\pg>del data-bak\pg_xlog\* c:\home\pg\data-bak\pg_xlog\*, Are you sure (Y/N)? y c:\home\pg>del data-bak\pg_xlog\archive_status\* c:\home\pg\data-bak\pg_xlog\archive_status\*, Are you sure (Y/N)? y # # Однако нам понядобятся еще не заархивированные логи из "продакшн" базы # c:\home\pg>xcopy /S data\pg_xlog data-bak\pg_xlog data\pg_xlog\000000010000000000000000.00494D68.backup data\pg_xlog\000000010000000000000001 data\pg_xlog\000000010000000000000002 data\pg_xlog\000000010000000000000003 data\pg_xlog\archive_status\000000010000000000000000.00494D68.backup.done data\pg_xlog\archive_status\000000010000000000000001.done 6 File(s) copied # # Создаем простейший конфиг для восстановления # c:\home\pg>notepad data-bak\recovery.conf c:\home\pg>type data-bak\recovery.conf restore_command = 'copy c:\\home\\pg\\xlogs\\%f %p' # # Запускаем пг с резервной копией кластера # c:\home\pg>pg_ctl start -D data-bak server starting c:\home\pg>LOG: database system was interrupted; last known up at 2008-09-05 16:47:39 MSD LOG: starting archive recovery LOG: restore_command = 'copy c:\\home\\pg\\xlogs\\%f %p' The system cannot find the file specified. 1 file(s) copied. LOG: restored log file "000000010000000000000000.00494D68.backup" from archive 1 file(s) copied. LOG: restored log file "000000010000000000000000" from archive LOG: automatic recovery in progress LOG: REDO (повторить) начинается с 0/494DB0 1 file(s) copied. LOG: restored log file "000000010000000000000001" from archive The system cannot find the file specified. LOG: запись с нулевой длинноц в 0/2AB0A90 LOG: REDO (повторить) завершено на 0/2AB0A48 LOG: last completed transaction was at log time 2008-09-05 16:54:22.814+04 The system cannot find the file specified. The system cannot find the file specified. LOG: selected new timeline ID: 2 The system cannot find the file specified. LOG: archive recovery complete LOG: database system is ready to accept connections LOG: autovacuum launcher started # # как видно сервер нашел логи и успешно их восстановил # при этом наш recovery.conf переименовался в recovery.done # c:\home\pg>dir data-bak\reco* Volume in drive C has no label. Volume Serial Number is 4CA6-478A Directory of c:\home\pg\data-bak 05.09.2008 16:57 52 recovery.done 1 File(s) 52 bytes 0 Dir(s) 16 549 830 656 bytes free # # Попробуем приконектиться к восстановленной базе # c:\home\pg>psql -U sotinov Active code page: 1251 version | now -----------------------------------------------------+---------------------------- PostgreSQL 8.3.1, compiled by Visual C++ build 1400 | 2008-09-05 16:59:24.637+04 (1 запись) Welcome to psql 8.3.1, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit postgres=# select count(1) from tab1; count -------- 137728 (1 запись) postgres=# \q c:\home\pg> # # Вроде все # |
||
5 сен 08, 17:49 [6153719] Ответить | Цитировать Сообщить модератору |
Между сообщениями интервал более 1 года. |
Multy Member [заблокирован] Откуда: Сообщений: 420 |
Самый главный FAQ по установке: Не забыть дать пользователю Postgres право на запись каталога где будут храниться базы. А то по ошибке которую он выдаёт понять это невозможно. Я видимо очень талантлив, догадался менее чем за час. Другим может больше времени понадобится. Было бы не плохо конечно что бы он сам при установке об этом предупреждал. |
27 фев 11, 13:55 [10295690] Ответить | Цитировать Сообщить модератору |
ОКТОГЕН Member Откуда: Сообщений: 2494 |
Как подсчитать количество секунд между двумя полями типа timestamp ?
SELECT extract(epoch from '2011-04-07 08:47:02'::timestamp - '2011-04-07 08:46:41'::timestamp); |
||
11 май 11, 19:06 [10637903] Ответить | Цитировать Сообщить модератору |
ОКТОГЕН Member Откуда: Сообщений: 2494 |
Можно. В 9.1 это можно будет сделать в лоб. Для 8.4 тоже можно, но чуть сложнее, надо установить дополнения, функционал, связанный с триграммами и выполнить скрипт pg_trgm.sql. Далее, пусть есть таблица CREATE TABLE public.example_table ( id BIGSERIAL, description VARCHAR(100) NOT NULL, CONSTRAINT example_table_pkey PRIMARY KEY(id) ) WITHOUT OIDS;И мы ищем по шаблону, по полю description Необходимо создать индекс CREATE INDEX example_table_idx ON public.example_table USING gin (description public.gin_trgm_ops);Далее, SELECT COUNT(0) FROM public.example_table; --------- 2739337 EXPLAIN ANALYZE SELECT id, description FROM public.example_table WHERE description % '%адин%'; ---------------------------------------------- Bitmap Heap Scan on example_table (cost=417.38..8533.23 rows=2739 width=53) (actual time=2.808..73.209 rows=2 loops=1) Recheck Cond: ((description)::text % '%адин%'::text) -> Bitmap Index Scan on example_table_idx (cost=0.00..416.69 rows=2739 width=0) (actual time=2.681..2.681 rows=1031 loops=1) Index Cond: ((description)::text % '%адин%'::text) Total runtime: 73.247 msА теперь сравним с обычным LIKE EXPLAIN ANALYZE SELECT id, description FROM public.example_table WHERE description LIKE '%адин%'; ---------------------------------------------- Seq Scan on example_table (cost=0.00..62755.71 rows=274 width=53) (actual time=0.039..1389.810 rows=2 loops=1) Filter: ((description)::text ~~ '%адин%'::text) Total runtime: 1389.841 msРезультат выборки id descriptionЕсть моменты. Как обычно, если селективность выборки низкая, то толку не будет, и в данном примере выигрыша в производительности не наблюдалось до 700-900 тысяч записей. Если у вас небольшая таблица - смысла использовать инструмент нет.(Хотя вроде как оптимизацию обещают) И ещё, чем длиннее текст - тем больше набор триграм для него, соответственно, жирнее индекс. Поэтому, нужно иметь маленькое текстовое поле с набором ключевых слов. |
||
10 авг 11, 11:08 [11095892] Ответить | Цитировать Сообщить модератору |
ОКТОГЕН Member Откуда: Сообщений: 2494 |
Индекс может быть и gin и gist типов. Можно создать CREATE INDEX example_table_idx ON public.example_table USING gist (description public.gist_trgm_ops);Работает аналогично, но почему-то медленнее. EXPLAIN ANALYZE SELECT id, description FROM public.example_table WHERE description LIKE '%адин%'; ------------------------------------------------------ Bitmap Heap Scan on example_table (cost=360.81..8476.66 rows=2739 width=53) (actual time=1843.539..1843.541 rows=2 loops=1) Recheck Cond: ((description)::text % '%адин%'::text) -> Bitmap Index Scan on example_table_idx (cost=0.00..360.12 rows=2739 width=0) (actual time=1843.518..1843.518 rows=2 loops=1) Index Cond: ((description)::text % '%адин%'::text) Total runtime: 1843.585 msКакой из типов использовать, зависит от ситуации(есть статья и страница докумментации на эту тему). |
10 авг 11, 12:00 [11096392] Ответить | Цитировать Сообщить модератору |
ОКТОГЕН Member Откуда: Сообщений: 2494 |
По результатам проверки на 9.1 оба индекса прошли проверку на 4500000 записей. Полёт нормальный. Да, и всё-таки для подключения расширения триграмм надо сказать CREATE EXTENSION pg_trgm; |
||
28 сен 11, 16:23 [11349600] Ответить | Цитировать Сообщить модератору |
Между сообщениями интервал более 1 года. |
PAPA_RimskY Member Откуда: СПб Сообщений: 52 |
У меня одного в этой доке не работают ссылки на эти страницы? Сижу с Фаерфокса. Поиск по сайту не помог найти эти страницы( http://postgresql.ru.net/docs/FAQ_russian.html#q2 2. Вопросы специфичные для платформы http://postgresql.org/wiki/Running & Installing PostgreSQL On Native Windows http://postgresql.org/wiki/Frequently Asked Questions#Platform FAQs |
15 авг 14, 12:24 [16445641] Ответить | Цитировать Сообщить модератору |
Павел Лузанов Member Откуда: Сообщений: 770 |
PAPA_RimskY, Эти ссылки ведут на официальный сайт postgresql.org, а там у этих страничек немного поменялся адрес, вот и не находит. Можно попросить админа сайта обновить ссылки или пойти на англоизычный FAQ, там ссылки работают. |
16 авг 14, 10:34 [16449702] Ответить | Цитировать Сообщить модератору |
PAPA_RimskY Member Откуда: СПб Сообщений: 52 |
По ссылке лежат два pdf с краткими инструкциями для маководов и виндузятников по созданию дампов и восстановлению из них. Вдруг кому понадобятся. http://help.theatremanager.com/book/export/html/1666 |
5 ноя 14, 17:48 [16802245] Ответить | Цитировать Сообщить модератору |
Между сообщениями интервал более 1 года. |
ОКТОГЕН Member Откуда: Сообщений: 2494 |
Есть CSV. Как подключить его на чтение к моей базе, чтобы не экспортировать? Просто! На примере кладра(база адресов РФ).
Комментарии: 1)Версия должна pg быть не древнее 9.1 2)Файл *.csv должен лежать на самом сервере, на него и на путь к нему должны быть права владельца сервиса СУБД, обычно это postgres 3)Пользуясь аналогичными источниками данных, можно подрубать таблицы и представления любых внешних СУБД, на которые доступны расширения. См. EXTENSION |
|
3 мар 17, 10:56 [20259657] Ответить | Цитировать Сообщить модератору |
ОКТОГЕН Member Откуда: Сообщений: 2494 |
Где скачать хорошую книгу по СУБД на русском языке, желательно, актуальной версии? Переводы актуальных версий документации находятся здесь. |
10 мар 17, 10:50 [20280596] Ответить | Цитировать Сообщить модератору |
Константин Сергеевич Дерерк Member Откуда: Сообщений: 311 |
Спасибо, прочитал. |
3 май 17, 16:06 [20453678] Ответить | Цитировать Сообщить модератору |
Все форумы / PostgreSQL | ![]() |