Co nového v PostgreSQL 7.2

11. 2. 2002
Doba čtení: 4 minuty

Sdílet

Téměř po roce je zde nový PostgreSQL, nyní ve verzi 7.2. Pojďme se podívat, co nového tato verze přináší a na co je třeba si dát pozor při přechodu na ni.

Tato nová verze PostgreSQL se nezdá být tak zlomovou. jako byla verze předchozí, ale přesto přináší několik zajímavých novinek.

Z jedné z hlavních novinek budou mít radost ti, co provozují PostgreSQL v aplikacích běžících nepřetržitě, neboť tam bylo v předchozích verzích problematické provádět VACUUM (defragmentace a tvorba statistik DB), protože zamykalo tabulky. Nyní je VACUUM, není-li použito VACUUM FULL, bez zámků a umožňuje DB standardně používat. Vhodné je podívat se do dokumentace a překontrolovat funkčnost vašich skriptů, které VACUUM provádějí, protože syntaxe je nyní trošku jiná.

Optimalizací se dočkal optimalizér, který lépe využívá statistik vytvořených během VACUUM ANALYZE. Optimalizaci by také mohlo přinést přidání indexů na některé systémové tabulky a odstranění OID z některých systémových katalogů.

Nemáte-li potřebu používat OID, což jsou interní čísla přidělená řádkům, můžete jejich existenci potlačit při tvorbě tabulky, tedy:

CREATE TABLE mytab (...) WITHOUT OIDS;

Asi každý, kdo byl jen trošku zvědavý a podíval se v předchozích verzích do systémové tabulky pg_shadow (musíte na to mít práva super uživatele), byl překvapen. Našel tu v celé své kráse a nahotě hesla uživatelů. Od verze 7.2 již lze heslo ukládat v MD5 formě. Chcete-li této možnosti využít, musíte při tvorbě uživatele použít příkaz

CREATE USER myuser WITH ENCRYPTED PASSWORD 'mypwd';

nebo v případě používání skriptu createuser použít parametr –encrypted.

S tímto souvisí i další věc, a tou je způsob autentifikace nastavený pro danou DB v souboru pg_hda.conf. Používáte-li běžná nešifrovaná hesla, je nutné mít zde jako metodu autentifikace uvedeno ‚password‘, pro šifrovaná (hashovaná, chcete-li) hesla je nutné použít metodu ‚md5‘. Pokud tuto metodu použijete, bude i přenos hesla po síti od klienta k serveru používat MD5. Pochopitelně pokud si žádáte solidní bezpečnost, je lepší použít SSL, které PostgreSQL taktéž již déle podporuje. Shrneme-li to, lze dnes používat autentifikační metody: trust, password, md5, crypt, ident, krb4, krb5 (krb=kerberos), pam, reject.

Souboru pg_hda.conf se týkají i další dvě změny. Tou první je, že jako další novou metodu autentifikace je možné použít ‚pam‘. Ano, PostgreSQL 7.2 má podporu PAM knihovny, byl-li kompilován s –with-pam. Tou další novinkou ohledně souboru pg_hda.conf je, že je načítán pouze při startu serveru, narozdíl od dřívějších verzí, kde byl čten při každém zahajování spojení s klientem. Snad se tak zrychlí (rychlostí jinak neoplývající) připojení k DB.

K dalším novinkám globálního charakteru patří podpora chybových a jiných hlášek serveru a klientů v národních jazycích, tedy LC_MESSAGES dle nastavení locales. Pro nás Čechy může být radostnou informací, že téměř vše s výjimkou serveru je již přeloženo. Na serveru se pracuje a přibližně ve verzi 7.3.1, půjde-li vše hladce, by měl být kompletně přeložen. S překladem serveru pomáhá Milan Roubal, za což mu děkuji.

Nyní udělám radost všem uživatelům Pythonu, protože PostgreSQL podporuje tento jazyk jako jeden z dalších, ve kterém lze psát interní funkce serveru (procedural language). Celkem jsou dostupné: SQL, PL/pgSQL, PL/Perl, PL/Tcl, PL/Python.

Znatelnou změnou, co se syntaxe týče, je porovnání „= NULL“, které již není funkční (vrací vždy false), a je nutné používat „IS NULL“. V konfiguračním souboru lze tuto vlastnost potlačit.

Velkých změn se dočkala část věnovaná časovým operacím. Slůvko ‚current‘ není již podporováno a je nutné používat již dlouhou dobu existující ‚now‘. Podobně funkci timestamp() nelze volat pro přetypování, ale je nutné používat standardní způsob přetypování, například CAST(data AS timestamp) nebo data::timestamp. Dále vznikl nový datový typ TIMESTAMP WITHOUT TIMEZONE.

V oblasti práv přibyla možnost definovat práva pomocí GRANT/REVOKE pro trigger a REFERENCES.

Zajímavostí pro administrátory nebo ty, kdo vlastní superuživatelská práva, je nový příkaz SET SESSION AUTHORIZATION, kterým lze změnit svou identitu podobně jako třeba pomocí příkazu „su“ v OS.

Obdobně i příkaz SHOW ALL, RESET ALL je cílen do řad administrátorů a ukáže/resetuje aktuální nastavení dané session. Nevíte-li, co vše lze nastavit příkazem SET, pomocí SHOW ALL to snadno zjistíte. Je toho dost.

Novinkou je možnost vytvářet dočasné sequence, a to příkazem CREATE [ TEMPORARY | TEMP ] SEQUENCE. Sequence nyní vnitřně pracují s int8. Sequence nemají daleko k typu serial (v MySQL se tomu říká auto_increment) a i zde je novinkou používat v tabulkách tento typ s přihlédnutím k potřebné velikosti, tedy buď SERIAL4 (4 byte int), nebo SERIAL8 (8 byte int).

Příkaz CREATE FUNCTION byl rozšířen o magické slůvko OR REPLACE, což by mělo vyčarovat úsměv na tvářích všech pisatelů a ladičů funkcí, protože již nemusí volat DROP FUNCTION.

Zamykání tabulek pomocí příkazu LOCK asi není u SQL veřejnosti často používáno, ale těm, co tak činí jistě udělá radost možnost zamknout několik tabulek najednou jedním příkazem.

Co ale velké využití najde, je možnost nastavit oddělovač dat (sloupců) pro příkaz COPY. Pomocí DELIMITERS nyní lze nastavit a používat i něco jiného než jen defaultní tabulátor.

Zvětšilo se množství funkcí umožnujících práci s datovým typem „Bytea“, který primárně slouží k ukládání binárních dat.

bitcoin_skoleni

Máte-li nějaké tajnosti, podívejte se do contrib stromu PostgreSQL na knihovnu pgcrypto, která umožňuje používat hodně algoritmů z OpenSSL v podobě funkcí použitelných v SQL dotazech.

Novinek je pochopitelně více, ale nejlépe bude, když si je vyzkoušíte sami. Začít můžete třeba zde.