<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="cs">
	<id>http://postgres.cz/index.php?action=history&amp;feed=atom&amp;title=PostgreSQL_8.5_alpha</id>
	<title>PostgreSQL 8.5 alpha - Historie editací</title>
	<link rel="self" type="application/atom+xml" href="http://postgres.cz/index.php?action=history&amp;feed=atom&amp;title=PostgreSQL_8.5_alpha"/>
	<link rel="alternate" type="text/html" href="http://postgres.cz/index.php?title=PostgreSQL_8.5_alpha&amp;action=history"/>
	<updated>2026-04-28T07:17:17Z</updated>
	<subtitle>Historie editací této stránky</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>http://postgres.cz/index.php?title=PostgreSQL_8.5_alpha&amp;diff=464&amp;oldid=prev</id>
		<title>90.179.17.183: /* Meziobdobí */</title>
		<link rel="alternate" type="text/html" href="http://postgres.cz/index.php?title=PostgreSQL_8.5_alpha&amp;diff=464&amp;oldid=prev"/>
		<updated>2010-02-28T10:20:09Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Meziobdobí&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Bodově z jednotlivých vývojových verzí PostgreSQL řady 8.5:&lt;br /&gt;
==Commitfest 8.5/1==&lt;br /&gt;
*odstraneni základních prekazek pro psani UDF v C++&lt;br /&gt;
*parametrizace vypisu provadeciho planu - umoznuje regresni testy planneru&lt;br /&gt;
*COPY WITH CSV FORCE QUOTE *&lt;br /&gt;
*fix &amp;quot;could not reattach to shared memory&amp;quot; on Windows&lt;br /&gt;
*ruční nastavení statistik sloupce ALTER TABLE ... ALTER COLUMN ... SET DISTINCT&lt;br /&gt;
*zobrazeni hodnot klicu, ktere zpusobuji chybu &amp;quot;duplicitni klice&amp;quot;&lt;br /&gt;
*vice vlaknovy pgbench&lt;br /&gt;
*Deferrable unique constraints &lt;br /&gt;
*strojově rozpoznatelný formát pro výpis prováděcího plánu&lt;br /&gt;
&amp;lt;pre&amp;gt;postgres=# explain (format xml) select 10;&lt;br /&gt;
                        QUERY PLAN                        &lt;br /&gt;
----------------------------------------------------------&lt;br /&gt;
 &amp;lt;explain xmlns=&amp;quot;http://www.postgresql.org/2009/explain&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;Query&amp;gt;&lt;br /&gt;
     &amp;lt;Plan&amp;gt;&lt;br /&gt;
       &amp;lt;Node-Type&amp;gt;Result&amp;lt;/Node-Type&amp;gt;&lt;br /&gt;
       &amp;lt;Startup-Cost&amp;gt;0.00&amp;lt;/Startup-Cost&amp;gt;&lt;br /&gt;
       &amp;lt;Total-Cost&amp;gt;0.01&amp;lt;/Total-Cost&amp;gt;&lt;br /&gt;
       &amp;lt;Plan-Rows&amp;gt;1&amp;lt;/Plan-Rows&amp;gt;&lt;br /&gt;
       &amp;lt;Plan-Width&amp;gt;0&amp;lt;/Plan-Width&amp;gt;&lt;br /&gt;
     &amp;lt;/Plan&amp;gt;&lt;br /&gt;
   &amp;lt;/Query&amp;gt;&lt;br /&gt;
 &amp;lt;/explain&amp;gt;&lt;br /&gt;
(1 row)&lt;br /&gt;
&lt;br /&gt;
postgres=# explain (format json) select 10;&lt;br /&gt;
          QUERY PLAN          &lt;br /&gt;
------------------------------&lt;br /&gt;
 [&lt;br /&gt;
   {&lt;br /&gt;
     &amp;quot;Plan&amp;quot;: {&lt;br /&gt;
       &amp;quot;Node Type&amp;quot;: &amp;quot;Result&amp;quot;,&lt;br /&gt;
       &amp;quot;Startup Cost&amp;quot;: 0.00,&lt;br /&gt;
       &amp;quot;Total Cost&amp;quot;: 0.01,&lt;br /&gt;
       &amp;quot;Plan Rows&amp;quot;: 1,&lt;br /&gt;
       &amp;quot;Plan Width&amp;quot;: 0&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 ]&lt;br /&gt;
(1 row)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*podpora formátu EEEE ve funkci to_char,&lt;br /&gt;
&lt;br /&gt;
==Commitfest 8.5/2==&lt;br /&gt;
* podpora UNICODE v PL/Pythonu,&lt;br /&gt;
* zobrazení chybového kontextu v PL/Perl-u,&lt;br /&gt;
* odstranění OUTER JOINu v případech, kdy vnitřní část spojení (ve výsledku nepoužitého) je dotaz do tabulky podmíněný podmínkou aktivující unikátní index (t. spojení nemá žádný efekt) - cílem je optimalizace primitivně generovaných SQL dotazů:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
postgres=# explain select x.a from x left join y on x.a = y.a;&lt;br /&gt;
                       QUERY PLAN                        &lt;br /&gt;
---------------------------------------------------------&lt;br /&gt;
 Seq Scan on x  (cost=0.00..1443.00 rows=100000 width=4)&lt;br /&gt;
(1 row)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* povolen zápis do proměnných odpovídajícím IN parametrům v PL/pgSQL,&lt;br /&gt;
* možnost parametrizace příkazu COPY seznamem příznaků oddělených čárkou,&lt;br /&gt;
* anonymní PL bloky - možnost použít PL kód bez nutnosti registrace funkce,&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 DO $$&lt;br /&gt;
 DECLARE r record;&lt;br /&gt;
 BEGIN &lt;br /&gt;
     FOR r IN SELECT rtrim(roomno) AS roomno, comment FROM Room ORDER BY roomno&lt;br /&gt;
     LOOP&lt;br /&gt;
         RAISE NOTICE &amp;#039;%, %&amp;#039;, r.roomno, r.comment;&lt;br /&gt;
     END LOOP;&lt;br /&gt;
 END$$ LANGUAGE plpgsql;&lt;br /&gt;
 NOTICE:  001, Entrance&lt;br /&gt;
 NOTICE:  002, Office&lt;br /&gt;
 NOTICE:  003, Office&lt;br /&gt;
 NOTICE:  004, Technical&lt;br /&gt;
 NOTICE:  101, Office&lt;br /&gt;
 NOTICE:  102, Conference&lt;br /&gt;
 NOTICE:  103, Restroom&lt;br /&gt;
 NOTICE:  104, Technical&lt;br /&gt;
 NOTICE:  105, Office&lt;br /&gt;
 NOTICE:  106, Office&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Vylepšení contrib modulu hstore - modul, který slouží k ukládání, indexaci a vyhledání v seznamech dvojic - klíč, hodnota. Odstraněn 64KB limit, konverze hodnot typu hstore z/do pole, recordu, řádku. Funkce pro iteraci nad seznamem klíčů,&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
postgres=# SELECT * FROM foo;&lt;br /&gt;
 a  | b  |   c    &lt;br /&gt;
----+----+--------&lt;br /&gt;
 10 | 20 | Pavel&lt;br /&gt;
 30 | 40 | Zdenek&lt;br /&gt;
(2 rows)&lt;br /&gt;
&lt;br /&gt;
postgres=# select (each(hstore(foo))).* from foo;&lt;br /&gt;
 key | value  &lt;br /&gt;
-----+--------&lt;br /&gt;
 a   | 10&lt;br /&gt;
 b   | 20&lt;br /&gt;
 c   | Pavel&lt;br /&gt;
 a   | 30&lt;br /&gt;
 b   | 40&lt;br /&gt;
 c   | Zdenek&lt;br /&gt;
(6 rows)&lt;br /&gt;
&lt;br /&gt;
CREATE OR REPLACE FUNCTION trgfce() &lt;br /&gt;
RETURNS trigger AS $$&lt;br /&gt;
DECLARE r record; &lt;br /&gt;
BEGIN &lt;br /&gt;
  FOR r IN SELECT (each(hstore(NEW))).* &lt;br /&gt;
  LOOP &lt;br /&gt;
    RAISE NOTICE &amp;#039;key:%, value: %&amp;#039;, r.key, r.value; &lt;br /&gt;
  END LOOP; &lt;br /&gt;
  RETURN new; &lt;br /&gt;
END&lt;br /&gt;
$$ LANGUAGE plpgsql;&lt;br /&gt;
&lt;br /&gt;
CREATE TRIGGER trg BEFORE INSERT ON foo FOR EACH ROW EXECUTE PROCEDURE trgfce();&lt;br /&gt;
&lt;br /&gt;
postgres=# INSERT INTO foo VALUES(80,90,&amp;#039;Zbynek&amp;#039;);&lt;br /&gt;
NOTICE:  key:a, value: 80&lt;br /&gt;
NOTICE:  key:b, value: 90&lt;br /&gt;
NOTICE:  key:c, value: Zbynek&lt;br /&gt;
INSERT 0 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* [http://archives.postgresql.org/pgsql-committers/2009-10/msg00023.php &amp;#039;&amp;#039;ALTER DEFAULT PRIVILEGES&amp;#039;&amp;#039;] - Možnost nastavit výchozí práva pro nově vytvářené objekty databáze, autor - Petr Jelínek,&lt;br /&gt;
* Podpora escape zápisu UNICODE znaků \Uxxxx nebo \Uxxxxxxxx (místo x... šestnáctibit nebo třicetdvabit hex číslo),&lt;br /&gt;
* Podpora kombinované a jmenné notace volání funkcí:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
create function dfunc(a int, b int, c int = 0, d int = 0)&lt;br /&gt;
  returns table (a int, b int, c int, d int) as $$&lt;br /&gt;
  select $1, $2, $3, $4;&lt;br /&gt;
$$ language sql;&lt;br /&gt;
select (dfunc(10,20,30)).*;&lt;br /&gt;
 a  | b  | c  | d &lt;br /&gt;
----+----+----+---&lt;br /&gt;
 10 | 20 | 30 | 0&lt;br /&gt;
(1 row)&lt;br /&gt;
&lt;br /&gt;
select (dfunc(10 as a, 20 as b, 30 as c)).*;&lt;br /&gt;
 a  | b  | c  | d &lt;br /&gt;
----+----+----+---&lt;br /&gt;
 10 | 20 | 30 | 0&lt;br /&gt;
(1 row)&lt;br /&gt;
 &lt;br /&gt;
select * from dfunc(10 as a, 20 as b);&lt;br /&gt;
 a  | b  | c | d &lt;br /&gt;
----+----+---+---&lt;br /&gt;
 10 | 20 | 0 | 0&lt;br /&gt;
(1 row)&lt;br /&gt;
&lt;br /&gt;
select * from dfunc(10 as b, 20 as a);&lt;br /&gt;
 a  | b  | c | d &lt;br /&gt;
----+----+---+---&lt;br /&gt;
 20 | 10 | 0 | 0&lt;br /&gt;
(1 row)&lt;br /&gt;
&lt;br /&gt;
select * from dfunc(1,2);&lt;br /&gt;
 a | b | c | d &lt;br /&gt;
---+---+---+---&lt;br /&gt;
 1 | 2 | 0 | 0&lt;br /&gt;
(1 row)&lt;br /&gt;
&lt;br /&gt;
select * from dfunc(1,2,3 as c);&lt;br /&gt;
 a | b | c | d &lt;br /&gt;
---+---+---+---&lt;br /&gt;
 1 | 2 | 3 | 0&lt;br /&gt;
(1 row)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* možnost nastavit systémové proměnné databáze per databázi a uživatele:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ALTER ROLE worker_bee SET maintenance_work_mem = 100000;&lt;br /&gt;
ALTER ROLE fred IN DATABASE devel SET client_min_messages = DEBUG;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* hromadné nastavení práv (autor: Petr jelínek):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GRANT/REVOKE ON ALL TABLES/SEQUENCES/FUNCTIONS IN SCHEMA&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* podpora UTF dekorací (rámečky) v psql&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
postgres=# select * from (values(10,20,30),(40,50,60)) x(a,b,c);&lt;br /&gt;
 a  │ b  │ c  &lt;br /&gt;
────┼────┼────&lt;br /&gt;
 10 │ 20 │ 30&lt;br /&gt;
 40 │ 50 │ 60&lt;br /&gt;
(2 rows)&lt;br /&gt;
&lt;br /&gt;
postgres=# \pset linestyle ascii&lt;br /&gt;
Line style is ascii.&lt;br /&gt;
postgres=# select * from (values(10,20,30),(40,50,60)) x(a,b,c);&lt;br /&gt;
 a  | b  | c  &lt;br /&gt;
----+----+----&lt;br /&gt;
 10 | 20 | 30&lt;br /&gt;
 40 | 50 | 60&lt;br /&gt;
(2 rows)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*podpora UPDATE triggrů pro vybrané sloupce,&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE TRIGGER before_upd_a_stmt_trig BEFORE UPDATE OF a ON main_table&lt;br /&gt;
  FOR EACH STATEMENT EXECUTE PROCEDURE trigger_func(&amp;#039;before_upd_a_stmt&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Meziobdobí==&lt;br /&gt;
*integrace SQL parseru do plpgsql - tento patch umožní identifikovat kolize plpgsql proměnných a SQL identifikátorů,&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
postgres=# &lt;br /&gt;
create or replace function foo(a integer) &lt;br /&gt;
returns void as $$&lt;br /&gt;
declare r record; &lt;br /&gt;
begin &lt;br /&gt;
  for r in &lt;br /&gt;
    select a from omega where omega.a = foo.a &lt;br /&gt;
  loop &lt;br /&gt;
    raise notice &amp;#039;%&amp;#039;, i; &lt;br /&gt;
  end loop; &lt;br /&gt;
end; &lt;br /&gt;
$$ language plpgsql;&lt;br /&gt;
CREATE FUNCTION&lt;br /&gt;
Time: 2,082 ms&lt;br /&gt;
postgres=# select foo(10);&lt;br /&gt;
ERROR:  column reference &amp;quot;a&amp;quot; is ambiguous&lt;br /&gt;
LINE 1: select a from omega where omega.a = foo.a&lt;br /&gt;
               ^&lt;br /&gt;
DETAIL:  It could refer to either a PL/pgSQL variable or a table column.&lt;br /&gt;
QUERY:  select a from omega where omega.a = foo.a&lt;br /&gt;
CONTEXT:  PL/pgSQL function &amp;quot;foo&amp;quot; line 1 at FOR over SELECT rows&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*contrib modul unaccent - modul pro ořezávání UTF diakritiky, funkce a fulltext slovník&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
postgres=# \i /usr/local/pgsql/share/contrib/unaccent.sql &lt;br /&gt;
CREATE FUNCTION&lt;br /&gt;
CREATE FUNCTION&lt;br /&gt;
CREATE FUNCTION&lt;br /&gt;
CREATE FUNCTION&lt;br /&gt;
CREATE TEXT SEARCH TEMPLATE&lt;br /&gt;
CREATE TEXT SEARCH DICTIONARY&lt;br /&gt;
postgres=# \df&lt;br /&gt;
                                       List of functions&lt;br /&gt;
 Schema │      Name       │ Result data type │          Argument data types          &lt;br /&gt;
────────┼─────────────────┼──────────────────┼───────────────────────────────────────&lt;br /&gt;
 public │ unaccent        │ text             │ regdictionary, text                   &lt;br /&gt;
 public │ unaccent        │ text             │ text                                  &lt;br /&gt;
 public │ unaccent_init   │ internal         │ internal                              &lt;br /&gt;
 public │ unaccent_lexize │ internal         │ internal, internal, internal, internal&lt;br /&gt;
(4 rows)&lt;br /&gt;
&lt;br /&gt;
postgres=# select unaccent(&amp;#039;žluťoučký kůň&amp;#039;);&lt;br /&gt;
   unaccent    &lt;br /&gt;
───────────────&lt;br /&gt;
 zlutoucky kun&lt;br /&gt;
(1 row)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Commitfest 8.5/3==&lt;br /&gt;
*hook pro CREATE ROLE, contrib modul passwordcheck pro ověření síly hesla,&lt;br /&gt;
*podpora podmíněných triggerů - klauzle WHEN pro příkaz CREATE TRIGGER,&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE TRIGGER modified_any &lt;br /&gt;
   BEFORE UPDATE OF a &lt;br /&gt;
   ON main_table&lt;br /&gt;
 FOR EACH ROW &lt;br /&gt;
  WHEN (OLD.* IS DISTINCT FROM NEW.*) &lt;br /&gt;
  EXECUTE PROCEDURE trigger_func(&amp;#039;modified_any&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Použití UTF znaků pro signalizaci pokračování řádku - explicitní přechod na nový řádek&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                  a                                  │                                  a                                   &lt;br /&gt;
─────────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────&lt;br /&gt;
 PostgreSQL je šířen pod BSD licencí, která je nejliberálnější ze vš…│ PostgreSQL je šířen pod BSD licencí, která je nejliberálnější ze vše…&lt;br /&gt;
…ech open source licencí. Tato licence umožňuje neomezené bezplatné …│…ch open source licencí. Tato licence umožňuje neomezené bezplatné po…&lt;br /&gt;
…používání, modifikaci a distribuci PostgreSQL a to ať pro komerční …│…užívání, modifikaci a distribuci PostgreSQL a to ať pro komerční neb…&lt;br /&gt;
…nebo nekomerční využití. PostgreSQL můžete šířit se zdrojovými kódy…│…o nekomerční využití. PostgreSQL můžete šířit se zdrojovými kódy neb…&lt;br /&gt;
… nebo bez nich, zdarma nebo komerčně.                              ↵│…o bez nich, zdarma nebo komerčně.                                   ↵&lt;br /&gt;
 PostgreSQL umožňuje běh uložených procedur napsaných v několika pro…│ PostgreSQL umožňuje běh uložených procedur napsaných v několika prog…&lt;br /&gt;
…gramovacích jazycích, v Perlu, v Pyhon, v jazyku C nebo v speciální…│…ramovacích jazycích, v Perlu, v Pyhon, v jazyku C nebo v speciálním …&lt;br /&gt;
…m PL/pgSQL, jazyku vycházejícím z PL/SQL fy. Oracle. Existují Postg…│…PL/pgSQL, jazyku vycházejícím z PL/SQL fy. Oracle. Existují PostgreS…&lt;br /&gt;
…reSQL varianty JDBC, ODBC, dbExpress, Open Office, PHP, .NET, Perl …│…QL varianty JDBC, ODBC, dbExpress, Open Office, PHP, .NET, Perl nati…&lt;br /&gt;
…nativních rozhraní. K PostgreSQL existuje překladač Embedded SQL pr…│…vních rozhraní. K PostgreSQL existuje překladač Embedded SQL pro C a…&lt;br /&gt;
…o C a C++. Dále existuje experimentální podpora SQL/PSM - standardi…│… C++. Dále existuje experimentální podpora SQL/PSM - standardizované…&lt;br /&gt;
…zovaného jazyka pro návrh uložených procedur v ANSI SQL.            │…ho jazyka pro návrh uložených procedur v ANSI SQL.&lt;br /&gt;
(1 row)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*ecpg:podpora dynamických kurzorů&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 strcpy(msg, &amp;quot;prepare&amp;quot;);&lt;br /&gt;
 exec sql prepare st_id1 from :stmt1;&lt;br /&gt;
&lt;br /&gt;
 strcpy(msg, &amp;quot;declare&amp;quot;);&lt;br /&gt;
 exec sql declare :curname3 cursor for st_id1;&lt;br /&gt;
&lt;br /&gt;
 strcpy(msg, &amp;quot;open&amp;quot;);&lt;br /&gt;
 exec sql open :curname3;&lt;br /&gt;
&lt;br /&gt;
 strcpy(msg, &amp;quot;fetch from&amp;quot;);&lt;br /&gt;
 exec sql fetch from :curname3 into :id, :t;&lt;br /&gt;
 printf(&amp;quot;%d %s\n&amp;quot;, id, t);&lt;br /&gt;
&lt;br /&gt;
 strcpy(msg, &amp;quot;fetch&amp;quot;);&lt;br /&gt;
 exec sql fetch :curname3 into :id, :t;&lt;br /&gt;
 printf(&amp;quot;%d %s\n&amp;quot;, id, t);&lt;br /&gt;
&lt;br /&gt;
 strcpy(msg, &amp;quot;fetch 1 from&amp;quot;);&lt;br /&gt;
 exec sql fetch 1 from :curname3 into :id, :t;&lt;br /&gt;
 printf(&amp;quot;%d %s\n&amp;quot;, id, t);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*anonymní procedurální blok v PLPerlu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DO $$&lt;br /&gt;
  $a = &amp;#039;This is a test&amp;#039;;&lt;br /&gt;
  elog(NOTICE, $a);&lt;br /&gt;
$$ LANGUAGE plperl;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*nový parametr pro CONNECT - application_name (APPNAME) - další dodatečná informace, kterou lze použít při monitorování provozu,&lt;br /&gt;
*opravy REGEXP pro UTF8 (case insensitive),&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- pred opravou&lt;br /&gt;
postgres=# SELECT &amp;#039;žluťoučký&amp;#039; ~* &amp;#039;.Luť.*&amp;#039;;&lt;br /&gt;
 ?column? &lt;br /&gt;
──────────&lt;br /&gt;
 t&lt;br /&gt;
(1 row)&lt;br /&gt;
&lt;br /&gt;
postgres=# SELECT &amp;#039;žluťoučký&amp;#039; ~* &amp;#039;ŽLuť.*&amp;#039;;&lt;br /&gt;
 ?column? &lt;br /&gt;
──────────&lt;br /&gt;
 f&lt;br /&gt;
(1 row)&lt;br /&gt;
&lt;br /&gt;
-- po oprave&lt;br /&gt;
postgres=# SELECT &amp;#039;žluťoučký&amp;#039; ~* &amp;#039;ŽLuť.*&amp;#039;;&lt;br /&gt;
 ?column? &lt;br /&gt;
----------&lt;br /&gt;
 t&lt;br /&gt;
(1 row)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*knihovny klienta jsou překládány s podporou thread-safety jako default,&lt;br /&gt;
*podpora obecných vylučujících omezujících pravidel - zobecnění pravidla UNIQUE,&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE TABLE circles (&lt;br /&gt;
    c circle,&lt;br /&gt;
    EXCLUDE USING gist (c WITH &amp;amp;&amp;amp;)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
postgres=# create table omega(a integer, exclude (a with =));&lt;br /&gt;
NOTICE:  CREATE TABLE / EXCLUDE will create implicit index &amp;quot;omega_a_exclusion&amp;quot; for table &amp;quot;omega&amp;quot;&lt;br /&gt;
CREATE TABLE&lt;br /&gt;
Time: 56,056 ms&lt;br /&gt;
postgres=# insert into omega values(10);&lt;br /&gt;
INSERT 0 1&lt;br /&gt;
Time: 1,456 ms&lt;br /&gt;
postgres=# insert into omega values(10);&lt;br /&gt;
ERROR:  conflicting key value violates exclusion constraint &amp;quot;omega_a_exclusion&amp;quot;&lt;br /&gt;
DETAIL:  Key (a)=(10) conflicts with existing key (a)=(10).&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*výpis prováděcího plánu ve formátu YAML,&lt;br /&gt;
*možnost nastavení přístopových práv k BLOB objektům:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT lo_create(1001);&lt;br /&gt;
 lo_create &lt;br /&gt;
-----------&lt;br /&gt;
      1001&lt;br /&gt;
(1 row)&lt;br /&gt;
&lt;br /&gt;
GRANT ALL ON LARGE OBJECT 1001 TO PUBLIC;&lt;br /&gt;
GRANT SELECT ON LARGE OBJECT 1003 TO regressuser2;&lt;br /&gt;
GRANT SELECT,UPDATE ON LARGE OBJECT 1004 TO regressuser2;&lt;br /&gt;
GRANT ALL ON LARGE OBJECT 1005 TO regressuser2;&lt;br /&gt;
GRANT SELECT ON LARGE OBJECT 1005 TO regressuser2 WITH GRANT OPTION;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*podpora polí pro PLPythonu&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE FUNCTION test_type_conversion_array_int4(x int4[]) RETURNS int4[] AS $$&lt;br /&gt;
plpy.info(x, type(x))&lt;br /&gt;
return x&lt;br /&gt;
$$ LANGUAGE plpythonu;&lt;br /&gt;
SELECT * FROM test_type_conversion_array_int4(ARRAY[0, 100]);&lt;br /&gt;
INFO:  ([0, 100], &amp;lt;type &amp;#039;list&amp;#039;&amp;gt;)&lt;br /&gt;
CONTEXT:  PL/Python function &amp;quot;test_type_conversion_array_int4&amp;quot;&lt;br /&gt;
 test_type_conversion_array_int4 &lt;br /&gt;
---------------------------------&lt;br /&gt;
 {0,100}&lt;br /&gt;
(1 row)&lt;br /&gt;
&lt;br /&gt;
SELECT * FROM test_type_conversion_array_int4(ARRAY[0,-100,55]);&lt;br /&gt;
INFO:  ([0, -100, 55], &amp;lt;type &amp;#039;list&amp;#039;&amp;gt;)&lt;br /&gt;
CONTEXT:  PL/Python function &amp;quot;test_type_conversion_array_int4&amp;quot;&lt;br /&gt;
 test_type_conversion_array_int4 &lt;br /&gt;
---------------------------------&lt;br /&gt;
 {0,-100,55}&lt;br /&gt;
(1 row)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* EXPLAIN ANALYZE (BUFFERS) - výpis prováděcího plánu zobrazuje využití cache,&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
postgres=# explain (analyze, buffers) select * from foo where a = 10;&lt;br /&gt;
                                         QUERY PLAN                                          &lt;br /&gt;
---------------------------------------------------------------------------------------------&lt;br /&gt;
 Seq Scan on foo  (cost=0.00..2.25 rows=1 width=4) (actual time=0.060..0.060 rows=0 loops=1)&lt;br /&gt;
   Filter: (a = 10)&lt;br /&gt;
   Buffers: shared hit=1&lt;br /&gt;
 Total runtime: 0.105 ms&lt;br /&gt;
(4 rows)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* explicitní určení pořadí záznamů v agregační funkci:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
postgres=# select array_agg(distinct a order by a desc), array_agg(a order by a) from foo;&lt;br /&gt;
-[ RECORD 1 ]------------------------------------------------&lt;br /&gt;
array_agg | {9652,8078,7671,7642,5048,4650,3886,2450,732,647}&lt;br /&gt;
array_agg | {647,732,2450,3886,4650,5048,7642,7671,8078,9652}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Bruce commitl zásadní patch - PL/pgSQL je dostupný bez dodatečné instalace - zapomeňte na CREATE LANGUAGE plpgsql,&lt;br /&gt;
*Hot Standby - počáteční patch povolující read only spojení do db během obnovy db (recovery) - jedná se o první formu vestevěné replikace do pg (pravděpodobně asynchronní master-slave), autorem je Simon Riggs,&lt;br /&gt;
==Meziobdobí==&lt;br /&gt;
*Možnost nezadávát název indexu a nechat systém vygenerovat unikátní normalizovaný název:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- nazev indexu neuveden - system pouzije concur_heap_expr_idx&lt;br /&gt;
CREATE INDEX CONCURRENTLY on concur_heap((f2||f1));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Zahrnutí statistik potomků do statistik rodiče,&lt;br /&gt;
*Parametry seq_page_cost a random_page_cost pro jednotlivé tablespaces,&lt;br /&gt;
*Modifikované VACUUM FULL - lépe řeší díry po velkých blokových operacích,&lt;br /&gt;
*Podpora 64bit na MS Windows,&lt;br /&gt;
==PostgreSQL 9.0/4==&lt;br /&gt;
*Podpora SQLDA v ecpg&lt;br /&gt;
*Původní full vacuum bylo úplně odstraněno&lt;br /&gt;
*Podpora DESCRIBE v ecpg&lt;br /&gt;
*Refaktoring plper&lt;br /&gt;
*Informace o vuyžití bufferů v tabulce pg_stat_statements&lt;br /&gt;
*Streaming replication&lt;br /&gt;
*out of scope cursors for ecpg&lt;br /&gt;
*escapované proměnné v psql&lt;/div&gt;</summary>
		<author><name>90.179.17.183</name></author>
	</entry>
</feed>