forked fromtvondra/shared_ispell
- Notifications
You must be signed in to change notification settings - Fork1
Shared ispell dictionary (stored in shared segment, used by multiple connections)
License
NotificationsYou must be signed in to change notification settings
postgrespro/shared_ispell
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Shared ISpell Dictionary========================This PostgreSQL extension provides a shared ispell dictionary, i.e.a dictionary that's stored in shared segment. The traditional ispellimplementation means that each session initializes and stores thedictionary on it's own, which means a lot of CPU/RAM is wasted.This extension allocates an area in shared segment (you have tochoose the size in advance) and then loads the dictionary into itwhen it's used for the first time.If you need just snowball-type dictionaries, this extension is notreally interesting for you. But if you really need an ispelldictionary, this may save you a lot of resources.Install-------Installing the extension is quite simple, especially if you're on 9.1.In that case all you need to do is this: $ make installand then (after connecting to the database) db=# CREATE EXTENSION shared_ispell;If you're on pre-9.1 version, you'll have to do the second part manuallyby running the SQL script (shared_ispell--x.y.sql) in the database. Ifneeded, replace MODULE_PATHNAME by $libdir.Config------No the functions are created, but you still need to load the sharedmodule. This needs to be done from postgresql.conf, as the moduleneeds to allocate space in the shared memory segment. So add this tothe config file (or update the current values) # libraries to load shared_preload_libraries = 'shared_ispell' # known GUC prefixes custom_variable_classes = 'shared_ispell' # config of the shared memory shared_ispell.max_size = 30MBYes, there's a single GUC variable that defines the maximum size ofthe shared segment. This is a hard limit, the shared segment is notextensible and you need to set it so that all the dictionaries fitinto it and not much memory is wasted.To find out how much memory you actually need, use a large value(e.g. 200MB) and load all the dictionaries you want to use. Then usethe shared_ispell_mem_used() function to find out how much memorywas actually used (and set the max_size GUC variable accordingly).Don't set it exactly to that value, leave there some free space,so that you can reload the dictionaries without changing the GUCmax_size limit (which requires a restart of the DB). Ssomethinglike 512kB should be just fine.The shared segment can contain several dictionaries at the same time,the amount of memory is the only limit. There's no limit on numberof dictionaries / words etc. Just the max_size GUC variable.Using the dictionary--------------------Technically, the extension defines a 'shared_ispell' template thatyou may use to define custom dictionaries. E.g. you may do this CREATE TEXT SEARCH DICTIONARY czech_shared ( TEMPLATE = shared_ispell, DictFile = czech, AffFile = czech, StopWords = czech ); CREATE TEXT SEARCH CONFIGURATION public.czech_shared ( COPY = pg_catalog.simple ); ALTER TEXT SEARCH CONFIGURATION czech_shared ALTER MAPPING FOR asciiword, asciihword, hword_asciipart, word, hword, hword_part WITH czech_shared;and then do the usual stuff, e.g. SELECT ts_lexize('czech_shared', 'automobile');or whatever you want.Resetting the dictionary------------------------If you need to reset the dictionary (e.g. so that you can reload theupdated files from disk), use shared_ispell_reset() function. Eveyonewho already uses the dictionaries will be forced to reinitialize thedata (first one will rebuild the dictionary in shared segment, theother ones will use this). SELECT shared_ispell_reset();That's all for now ...
About
Shared ispell dictionary (stored in shared segment, used by multiple connections)
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
No packages published
Languages
- C91.5%
- PLpgSQL3.8%
- Meson3.1%
- Makefile1.6%