Instalace PostgreSQL
Databázový server PostgreSQL běží vždy pouze pod uživatelem postgres. Pod uživatelem root se odmítne spustit. Také poinstalační administrace se provádí pod uživatelem postgres. Je to jediný uživatel, který je k dispozici po inicializaci databáze. Pod tímto uživatelem můžete přidat další uživatele. Obyčejně neznáte heslo tohoto uživatele, zvlášť pokud účet postgres generoval instalátor. Řešením je z účtu roota použít příkaz su postgres. Bezpečnostní politika je taková, že pokud instalujete z balíčků, tak v podstatě se k databázi nikdo nepřihlásí vyjma uživatele postgres z lokálního účtu (je třeba modifikovat configurační soubor pg_hba.conf). Pokud instalujete ze zdrojových kódů, tak tam je situace přesně opačná; přístup k databázím není vůbec omezen a v podstatě také je nutné upravit pg_hba.conf.
Instalace ze zdrojových kódů
<stáhnutí zdrojových kódů> tar xvfz postgresqlxxx.tar.gz cd postgresxxx ./configure --with-perl make all su root make install cp contrib/start-scripts/linux /etc/init.d/pgsql chmod +x /etc/init.d/pgsql useradd postgres mkdir /usr/local/pgsql/data chown postgres /usr/local/pgsql/data
Inicializace db clusteru - trochu zjednodušeně se tento proces dá označit jako vytvoření systémové databáze.
su postgres /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data --encoding=utf8 --locale=cs_CZ.UTF-8
Start serveru, zpřístupnění jazyků PL/pgSQL a PL/Perl a vytvoření uživatele:
/etc/init.d/pgsql start su postgres /usr/local/pgsql/bin/createlang plperl template1 /usr/local/pgsql/bin/createlang plpgsql template1 /usr/local/pgsql/bin/createuser pavel
Otevření SQL konzole do testovací databáze:
/usr/local/pgsql/bin/psql postgres
Data jsou uložena v adresáři /usr/local/pgsql/data včetně konfiguračních souborů.
Instalace na Fedoře
Instalace serveru, klientských knihoven, podpory php a hpPgAdminu
[pavel@localhost ~]$ su [root@localhost pavel]# yum install postgresql [root@localhost pavel]# yum install postgresql-server [root@localhost pavel]# yum install php-pgsql [root@localhost pavel]# yum install -i phpPgAdmin-4.0.1-1.noarch.rpm [root@localhost pavel]# /etc/init.d/postgresql start
Vytvoření dalšího uživatele, který není superuser, ale má právo přidávat další uživatele a vytvářet nové databáze. Je vhodné omezit počet uživatelů s právem superuser.
[pavel@localhost ~]$ su [root@localhost pavel]# su postgres [postgres@localhost pavel]# createuser pavel Shall the new role be a superuser? (y/n) n Shall the new role be allowed to create databases? (y/n) y Shall the new role be allowed to create more new roles? (y/n) y CREATE ROLE
Data a konfigurační soubory jsou umístěna v adresáři /var/lib/pgsql/data.
Fedora 18
Ve Fedoře 18 je nutné před tím, než může být server spuštěn, provést ještě příkaz
[root@localhost pavel]# postgresql-setup initdb
Instalace v Debianu (Ubuntu)
su - apt-get install postgresql postgresql-client /etc/init.d/postgresql start su postgres createuser dbuzivatel
Více o instalaci PostgreSQL a ident autentifikaci na http://gama.fsv.cvut.cz/wiki/index.php/Instalace_a_správa_PostgreSQL. Konfigurační soubory jsou v /etc/postgresql, data v adresáři /var/lib/postgres/data.
Instalace na Gentoo
$ su - # export PG_INITDB_OPTS="--encoding=utf8 --locale=cs_CZ.UTF-8" # emerge -av postgresql-server postgresql-base # emerge --config =postgresql-server-8.4.1-r1 * Are you ready to continue? (Y/n) Y # /etc/init.d/postgresql-8.4 start # su postgres $ psql Welcome to psql 8.3.7 (server 8.4.1), the PostgreSQL interactive terminal. postgres=#
Pozor, proměnnou PG_INITDB_OPTS je třeba nastavit před samotným emerge (viz. http://bugs.gentoo.org/233572). Data a konfigurační soubory naleznete v adresáři /var/lib/postgresql/8.4/data.
Konfigurace SELinuxu
Pokud je zapnutý SELinux, a chcete přístup z PHP (potažmo Apache) k db, pak je nutné tento přístup povolit
setsebool -P httpd_can_network_connect_db on
Ostatní distribuce
?? Dobrovolník??
Instalace v Microsoft Windows
Spusťte instalační program a sledujte pokyny instalátoru. Jediná komplikace může nastat, pokud používáte souborový systém FAT32. Na tomto souborovém systému instalátor automaticky nevytvoří systémovou databázi (datový cluster). Tu je třeba vytvořit manuálně příkazem initb (pouze pokud chcete umístit data na souborový systém FAT32). Pokud to je jenom trochu možné, používejte alespoň verzi 8.3. Nepoužívejte starší verze, jsou mnohem pomalejší.
Nikdy nespouštějte příkaz initdb jako uživatel Administrator. Pokud potřebujete vygenerovat databázový cluster, použijte příkaz runas.
- Špatně:
-- aktuální uživatel je Administrator C:\PostgreSQL\bin>initdb -D ../data The program "postgres" is needed by initdb but was not found in the same directory as "C:\PostgreSQL\bin/initdb". Check your installation.
- Správně:
C:\PostgreSQL\bin>runas /user:postgres "c:/postgresql/bin/initdb -D C:/PostgreSQL/data"
nebo pro UTF-8
C:\PostgreSQL\bin>runas /user:postgres "c:/postgresql/bin/initdb -D C:/PostgreSQL/data -E UTF-8"
V prípade, že pre inicializáciu databázového clustra chcete použiť príkazový riadok systému Windows a chcete zadávať locales explicitne je nutné si uvedomiť, že locales stringy vo Windows sú rozdielne oproti locales stringom v unix-like systémoch. Nápomocná môže byť adresa: Language and Country/Region Strings případně Table of locales
Napríklad: máte Windows XP Professional Czech kde v ovládacích paneloch je nastavenie ponechané na defaultné hodnoty (čeština). Potrebujete inicializovať databázový cluster s nastaveniami pre němčinu a default kódovaním UTF8. Potom by príkaz "initdb" mohol vyzerať napríklad nasledovne:
initdb -D ..\clusters\clusterA --locale=german_germany -E UTF8
Poznámka
V případě, že reinstalujete postgresql a zapomenete dřívější heslo pro uživatele postgres, je nutné uživatele postgres odstranit:
cmd.exe net user postgres /delete
Po instalaci
- kontrola locales na unix o.s.
[pavel@localhost ~]$ psql postgres Welcome to psql 8.2beta1, the PostgreSQL interactive terminal. postgres=> SHOW lc_collate; lc_collate ------------- cs_CZ.UTF-8 (1 row) postgres=> SELECT upper('žlutý kůň'); upper ----------- ŽLUTÝ KŮŇ (1 row)
Ve windows nepoužívejte konzolu, ale spíše pgAdmina. Konzole ve windows je poměrně neohrabaná. Nenechte se vystrašit tím, že v název kódování neobsahuje UTF-8 (Pokud jste se rozhodli použít toto kódování). Kódování UTF-8 je ve Windows podporováno až verzí 8.3.
lc_collate | Czech_Czech Republic.1250 lc_ctype | Czech_Czech Republic.1250
- Podle distribuce a podle potřeby nastavte přístup k serveru pomocí protokolu tcp/ip. Není žádoucí, aby uživatel postgres měl přístup k postgresu z internetu (v konfiguraci phpPgAdmina). Tato konfigurace umožní neomezený lokální přístup skrz tcp/ip.
postgresql.conf =============== listen_addresses = 'localhost' pg_hba.conf =========== #přístup odevšad, pozor bezpečnostní riziko 0.0.0.0/0 host all all 127.0.0.1/32 md5
- Přidělte PostgreSQL dostatek paměti
- Nastavte default_statistics_target na 100.
- Pokud chcete používat konzolu v Microsoft Windows, spouštějte cmd s parametrem /c chcp 1250. V psql pak změňte klientské kódování na win1250 příkazem. Nezapomeňte změnit písmo na Lucida console (pravé tlačítko na záhlaví okna a volba "vlastnosti").
SET CLIENT_ENCODING TO ‘win1250’;
Abyse tento příkaz nemusel pokaždé opisovat, uložte jej do souboru .psqlrc ve Vašem domovském adresáři.
Instalace Fulltextu
- Instalace podpory českého jazyka pro 8.3 (a vyšší - pro databáze v UTF8) - stáhněte si balík s podporou. Soubory czech.affix, czech.dict a czech.stop rozbalte a přesuňte do adresáře share/tsearch_data. Tento adresář by se měl nacházet v adresáři postgresql (záleží na distribuci - default: /usr/local/pgsql/). Poté se přihlaste jako superuser a spusťte příkazy:
CREATE TEXT SEARCH DICTIONARY cspell (template=ispell, dictfile = czech, afffile=czech, stopwords=czech); CREATE TEXT SEARCH CONFIGURATION cs (copy=english); ALTER TEXT SEARCH CONFIGURATION cs ALTER MAPPING FOR word, asciiword WITH cspell, simple;
Poté by výstup z ladící funkce na řetězec 'Příliš žluťoučký kůň se napil žluté vody' měl být následující:
postgres=# select * from ts_debug('cs','Příliš žluťoučký kůň se napil žluté vody'); alias | description | token | dictionaries | dictionary | lexemes -----------+-------------------+-----------+-----------------+------------+------------- word | Word, all letters | Příliš | {cspell,simple} | cspell | {příliš} blank | Space symbols | | {} | | word | Word, all letters | žluťoučký | {cspell,simple} | cspell | {žluťoučký} blank | Space symbols | | {} | | word | Word, all letters | kůň | {cspell,simple} | cspell | {kůň} blank | Space symbols | | {} | | asciiword | Word, all ASCII | se | {cspell,simple} | cspell | {} blank | Space symbols | | {} | | asciiword | Word, all ASCII | napil | {cspell,simple} | cspell | {napít} blank | Space symbols | | {} | | word | Word, all letters | žluté | {cspell,simple} | cspell | {žlutý} blank | Space symbols | | {} | | asciiword | Word, all ASCII | vody | {cspell,simple} | cspell | {voda} (13 rows)
- Instalace v 8.2 - TSearch2
Nastavení replikace
viz Replikace
Vytvoření nové databáze, příkaz createdb
Novou databázi vytvoříte voláním systémového příkazu createdb nebo SQL příkazu CREATE DATABASE. Nově vytvořená databáze musí zachovat locale (callation) jako vzorová databáze (template). Pokud používá jiné locale (ta možnost tu je od 8.4), tak je nezbytné novou db vytvořit na základě template0, která je neutální z pohledu locale.