Instalace PostgreSQL

Z PostgreSQL
Přejít na: navigace, hledání

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)

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.