Extensions
Jak se chovat, pokud chci přidat/zjistit jestli běží nějakou extension?
- nainstalujeme vhodný balíček, příklady níže
apt-get install postgresql-contrib-9.3 postgresql-plpython-9.3
- zrestartujeme databázi
- najdeme si extension za pomocí příkazu
SELECT * FROM pg_available_extensions;
- vytvoříme nad databází za pomocí sql příkazu
CREATE EXTENSION "název";
- pokud chceme zjistit seznam dostupných extensions nad databází tak sql
SELECT * FROM pg_extension
Fulltext vyhledávání
Popis jak nastavit české fulltextové vyhledávání v postgresql za pomocí českého ispell slovníku.
- vytvoříme sloupeček, ve kterém se bude hledat
ALTER TABLE items ADD COLUMN search_text TSVECTOR DEFAULT NULL;
- do /usr/share/postgresql/9.3/tsearch_data je potřeba nahrát slovníky český ispell
- je potřeba vytvořit slovník
CREATE TEXT SEARCH DICTIONARY czech_ispell ( TEMPLATE = ispell, DictFile = czech, AffFile = czech, StopWords = czech ); - nyní je potřeba vytvořit konfiguraci (tady se dá dost hrat, dole lze definovat spousta slovníků)
CREATE TEXT SEARCH CONFIGURATION public.czech ( COPY = pg_catalog.english ); ALTER TEXT SEARCH CONFIGURATION czech ALTER MAPPING FOR asciiword, asciihword, hword_asciipart, word, hword, hword_part WITH czech_ispell, simple; ALTER TEXT SEARCH CONFIGURATION czech DROP MAPPING FOR email, url, url_path, sfloat, float; - vytvoření indexu
UPDATE items SET search_text = to_tsvector('czech', title || ' ' || (attributes->>'identification')::text); CREATE INDEX search_text_gin ON items USING GIN(search_text); - vytvoříme si trigger, který bude pravidelně index udržovat
CREATE FUNCTION avector_update() RETURNS TRIGGER AS $$ BEGIN IF TG_OP = 'INSERT' THEN NEW.search_text = to_tsvector('czech', NEW.title || ' ' || (NEW.attributes->>'identification')::text); END IF; IF TG_OP = 'UPDATE' THEN NEW.search_text = to_tsvector('czech', NEW.title || ' ' || (NEW.attributes->>'identification')::text); END IF; RETURN NEW; END $$ LANGUAGE 'plpgsql'; CREATE TRIGGER ts_search_text BEFORE INSERT OR UPDATE ON items FOR EACH ROW EXECUTE PROCEDURE avector_update(); - nyní je možné volat hledání s jazykem czech
SELECT * FROM items where search_text @@ to_tsquery('czech', 'keyword');
Instalace
Instalace postgresql na debianu.
- Nainstaluji databázi z balíčku.
apt-get install postgresql
- Pokud potřebuji novější verzi než je v balíčku debianu, tak je potřeba nejprve přidat repozitář s novou verzí. Vytvoříme soubor s textem
vim /etc/apt/sources.list.d/pgdg.list deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main
Dále pak přidáme klíč k repozitářiwget https://www.postgresql.org/media/keys/ACCC4CF8.asc apt-key add ACCC4CF8.asc
Pak už jen aktualizujeme repozitář a instalujeme konkrétní verziapt-get update apt-get install postgresql-9.3
- Dále nastavíme heslo pro uživatele postgres, kterého nám instalace vytvořila. NIKDY nevytvářet heslo pro uživatele postgres v debianu!
su -l root su - postgres psql
V konzoli postgresql použijeme příkaz\password postgres
- pokud se chci připojovat do databáze na vytvořeného uživatele skrze heslo, je potřeba změnit nastavení
vim /etc/postgresql/9.3/main/pg_hba.conf local all all md5
- Nastavení vzdáleného přístupu
- je potřeba v konfiguračním souboru /etc/postgresql/9.3/main/postgresql.conf odkomentovat parametr listen_addresses a přidat tam adresu serveru, kde je postgresql nainstalován
listen_addresses = 'localhost, 192.168.1.200'
- v souboru /etc/postgresql/9.3/main/pg_hba.conf přidát řádky pro SERVER_IP a MANAGEMENT_IP
host all all 192.168.1.200/24 md5 host all all 192.168.1.51/24 md5
pokud chci přihlášení bez hesla tak se md5 vymění za trust - pokud je zapnutý firewall, je potřeba povolit připojení skrz konkrétní ip adresu
iptables -A INPUT -p tcp -m tcp -s 10.8.4.10 --dport 5432 -j ACCEPT
- Pokud chceme mít přístup do postgresql přímo z roota, tak se přihlásíme pres postgres uživatele do databáze a zavoláme tyto příkazy
CREATE ROLE root superuser; CREATE USER root; GRANT ROOT TO root; ALTER ROLE root WITH LOGIN;