PostgreSQL je pravděpodobně nejpokrokovějším open source RDBMS. Jeho přednostmi je podpora všech moderních operačních systémů (od verze 8.0.1 i win32) včetně os/2 a Novell (je součástí většiny distribucí linuxu). Pokud chcete spouštět PostgreSQL na NT4, přečtěte si FAQ_windows. Je šířen pod BSD licencí umožňující vlastní úpravy a šíření binárního kódu, splňuje kritéria ACID, z SQL podporuje cizí klíče, JOIN tabulek, pohledy, spouště, vnořené příkazy SELECT, příkazy CASE, COALESCE a NULLIF. Uživatelem definované funkce (UDF) mohou být psané v několika programovacích jazycích. UDF lze využít k návrhu vlastních datových typů, konverzních a agregačních funkcí. Obsahuje kvalitní, přehlednou a dobře udržovanou dokumentaci + český překlad FAQ.
Pro PostgreSQL existuje OLEDB, ODBC driver, .NET provider, komerční dbExpress Driver, OpenOffice postgresql-sdbc-driver, existuje podpora pro XUL, podporu PostgreSQL má většina programovacích jazyků - namádkou PHP, Perl, Pascal, Python, libpq nebo Embedded SQL pro C/C++, Java (JDBC) a další.
On-line zdroje
V češtině je to především konference databases@linux.cz, která je přístupná také prostřednictvím news cz.comp.databases.misc. Archiv konference naleznete na http://www.linux.cz/lists/archive/databases/. Dále jsou k dispozici konference (v angličtině) psql-general (obecné dotazy), psql-bugs (hlášení chyb) nebo psql-hackers (komunikace s/mezi vývojáři).
Vývoj | |
Stabilní verzí je od 5.10.2005 verze 8.0.4 (seznam změn). Z této verze již byl odstraněn patentově problematický algoritmus ARC. Nejdůležitější novinky: Savepoints, PITR, CVS pro COPY. Od 8.1 se očekává podpora dvoufázového potvrzování, integrace PG_Autovacuum, podpora uložených procedur (ve skutečnosti PG umožňuje pouze návrh funkcí), vyšší výkon na high-end hardwaru, podpora rekurzivních dotazů,...
Poslední předchozí verze je 7.4.9. Oproti předchozí verzi přinaší opravu chyb, zlepšený výkon (je znatelně rychlejší (první uživatelé hovoří o dvoj až pětinásobném zrychlení některých dotazů) ~ opravou chyb, sofistikovanějším využití indexů) a dostupnost, podporu polí, snadnější konfiguraci, polymorfní funkce, standardní informační schémata, úplnější lokalizaci, fulltext a další - seznam změn.
Co lze čekat od 8.1? Předně dvoufázové potvrzování, poněkud nečekaně Partitioning (přišly vhod OO vlastnosti Pg), přechod ze skupin uživatelů na role, integrované autovacuum. Pak balík dalších vylepšení: souběh GIST, balík funkcí pro správu db, zrychlení příkazu COPY, pár změn doznalo PL/pgSQL i PL/Perl, funkce GREATEST a LEAST, binární indexy (index se použije i pro podmínky OR), optimalizace dotazů obsahujících MIN() MAX() funkce. Pokročilo SlonyI. Co nebude: Rekurzivní dotazy. A co by tak mohlo přijít na jaře: XML a nested tables, PL/pgSQL debugger, SlonyII
Kromě oficiálního vývojového stromu existují také další podporující např. dvoufázový commit nebo replikace PostgreSQL-R. EnterpriseDB nabízí větší kompatibilitu s Oracle - inline triigery, Oracle datové typy, vestavěné funkce jako SYSDATE, nová sys. schémata - ALL_TABLES. Starší verze PostgreSQL (před 8.0.x) bylo možné na platformě WinNT provozovat pouze s emulací CYGWIN. Existují ale komerční varianty - PowerGres k dispozici je 60denní trial verze, dbExperts PostgreSQL Professional, které lze spustit nativně na Windows 2000 a Windows XP, tj. bez jakékoliv emulace Unixu. Projekt Slony-I je funkčním a jednodušše instalovatelným řešení master-multislave replikací.
8.0.2 podporuje PL/pgSQL Output parametry. (S jejich implementací byla odstraněna nutnost ukončovat provádění funkce příkazem RETURN. Output parametry lze používat jak v obyčejných funkcích, tak v SRF funkcích. Funkce vrací RECORD obsahující všechny hodnoty všech OUT proměnných. Neobvyklé je volání funci s OUT parametry. Všechny OUT proměnné se musí odstranit ze seznamu parametrů funkce:
CREATE OR REPLACE FUNCTION foo(OUT x integer, INOUT y integer) AS $$
BEGIN x := y; END; $$ LANGUAGE plpgsql;
test=# SELECT foo(10); test=# SELECT * FROM foo(10);
foo x | y
--------- ----+----
(10,10) 10 | 10
CREATE OR REPLACE FUNCTION foo2(OUT x integer, OUT y integer) RETURNS SETOF record AS $$
BEGIN x := 0; y := 1;
FOR _i IN 1..3 LOOP
RETURN NEXT;
x := x + 1; y := y + 1;
END LOOP;
END; $$ LANGUAGE plpgsql;
test=# SELECT * FROM foo2();
x | y
---+---
0 | 1
1 | 2
2 | 3
(3 řádek)
Články | |
V článku Instalace PostgreSQL je stručně (cca na 50 řádkách), ale dostatečně popsána instalace PostgreSQL ze zdrojových souborů.
V dokumentu Hezky česky v PostgreSQL Karel Žák popisuje národní podporu (kódování a třídění) v PostgreSQL.
Článek Karla Žáka Co nového v PostgreSQL je věnován přehledu nových vlastností PostgreSQL 7.3
V jemném úvodu do PL/pgSQL se dozvíte, jak navrhovat a používat UDF funkce v program. jazyce PL/pgSQL.
Článek Návrh UDF v C Vás seznámí s realizaci UDF funkcí v C. Odměnou za vyšší pracnost je vyšší výkon.
Seriál PostgreSQL na Linuxzone je věnovaný především přístupu k PostgreSQL z různých vývoj. prostředí (zejména prostřednictvím knhovny libpq).
Jak ukládat obrázky do PostgreSQL Vám poradí Pavel Janík v článku PHP a Large Objects v PostgreSQL. V článku je stručně popsána manipulace s tzv. BLOBy v jazyce PHP.
Článek PostgreSQL SPI a triggery v C Karla Žáka je věnován návrhu spouští (triggerů) v C pomocí SPI rozhraní
Dokument Pgbash se věnuje možnosti používání SQL příkazů v unixovém shellu Bash
Články Petra Bravence Jak na účetnictví v Linuxu jsou velice dobrou ukázkou návrhu databáze. Na příkladu realizace podvojného účetnictví autor demonstruje zajištění referenční a doménové integrity a optimalizaci databáze.
Pavel Kysilka v článku Praktický návod k PgSQL popisuje své zkušenosti s migrací z MySQL do PostgreSQL.
Článek Jirky Koska Úvod do PostgreSQL a PHP je návodem pro začátečníky na psaní vlastních php stránek přistupujících do RDBMS PostgreSQL
| |
V článku Použití SRF funkcí v jazyce PL/pgSQL při návrhu plánovacích funkcí je popsáno použití funkcí vracející tabulky a datumová aritmetika beroucí v potaz víkendy a státní svátky.
Karel Žák ve svém výstižně nazvaném článku Co je nového v PostgreSQL 7.4. seznamuje čtenáře roota s nejdůležitějšími změnami ve verzi 7.4.
Chybějící podpora fulltextu byla závažným nedostatkem PostgreSQL. Modul tsearch2 představuje originální řešení fulltextového vyhledávání. Popisem modulu se zabývá článek Fulltextování v PostgreSQL Pavla Stěhuleho na rootu.
Přínosem PL/Perlu se zabývá článek Krátce o PL/Perl Pavla Stěhuleho na rootu.
Karel Žák ve svém článku PostgreSQL:připravené dotazy a oddělení dat od dotazů shrnuje přínos předpřipravených parametrizovaných dotazů k bezpečnosti aplikace.
Na rootu vychází seriál Radima Koláře věnovaný replikačnímu systému Slony1
Marek Olšavský pro Linuxsoft.cz připravuje seriál o jazyku SQL. Jako referenční SQL server zvolil jeho oblíbenou databázi PostgreSQL.
Karel Žák pokračuje v tradici svých článků na rootu věnovovaných novinkám PostgreSQL. Tentokrát píše o verzi 8.0.
Na serveru root Pavel Stěhule publikoval článek PL/Perl, PostgreSQL aneb jak na aplikační server, kde mimo jiné ukazuje možnost přístupu do externích databází (konkrétně MySQL) pomocí rozhraní DBI
Několik možných způsobů řešení úloh nad daty obsahující stromové struktury popisuje Pavel Stěhule v článku Stromy.
Článek Kešování prováděcích plánů v PL/pgSQL vysvětluje problematiku zpracování SQL dotazů v jazyce PL/pgSQL a vysvětluje jak rozpoznat a vyvarovat se chybám vznikajících z nepochopení principu provádění SQL příkazů v PostgreSQL.
|
Případové studie | |
V článku Radim Kolář popisuje zkušenosti s přechodem na PostgreSQL z DB2 a s provozem PostgreSQL.
| |
Přechodem z RDBMS Solid na PostgreSQL se zabývá studie Pavla Stěhuleho.
|
Tip | |
Inicializace větších polí v PL/pgSQL je neefektivní (každý přiřazovací příkaz generuje nové pole. Mnohem rychlejší je použítí funkce generate_series (v PL/pgSQL 317ms, SQL 16ms):
select array (select 0 from generate_series(1,10000));
PostgreSQL nepodporuje SQL příkaz MERGE. Jedním možným řešením je následující uložená procedura:
CREATE TABLE db (a INT PRIMARY KEY, b TEXT);
CREATE FUNCTION merge_db (key INT, data TEXT) RETURNS VOID AS $$
BEGIN
LOOP
UPDATE db SET b = data WHERE a = key;
IF found THEN RETURN; END IF;
BEGIN
INSERT INTO db(a,b) VALUES (key, data);
RETURN;
EXCEPTION WHEN unique_violation THEN
-- do nothing
END;
END LOOP;
END; $$ LANGUAGE plpgsql;
SELECT merge_db (1, 'david');
SELECT merge_db (1, 'dennis');
PostgreSQL neumožňuje deklarovat session proměnné. Náhradním řešením bylo vytvoření dočasné tabulky a ukládání proměnných do ní. V plperlu (PostgreSQL 7.5) je k dispozici hash. tabulka existující po celou dobu session. Drobnou nepříjemností je, že plperl nepodporuje anyelement, a anyarray.
CREATE OR REPLACE FUNCTION putv(text, text) RETURNS text AS $$
$_SHARED{$_[0]}=$_[1];
$$ LANGUAGE plperl;
CREATE OR REPLACE FUNCTION getv(text) RETURNS text AS $$
return $_SHARED{$_[0]};
$$ LANGUAGE plperl;
Pomocí takto vytvořených pseudoglobálních proměnných můžeme např. celkem řešít úlohu číslování řádků:
lokality=# select putv('idx',0);
putv
------
0
(1 row)
lokality=# select putv('idx',cast(getv('idx')as integer)+1), ulice, cispop from lok limit 5;
putv | ulice | cispop
------+-----------+--------
1 | K LIPANŮM | 0
2 | K LIPANŮM | 0
3 | K LIPANŮM | 54
4 | K LIPANŮM | 55
5 | K LIPANŮM | 56
(5 rows)
Převzato z http://www.varlena.com/GeneralBits/
|