<?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=Epsql_%28experimental_psql%29</id>
	<title>Epsql (experimental psql) - Historie editací</title>
	<link rel="self" type="application/atom+xml" href="http://postgres.cz/index.php?action=history&amp;feed=atom&amp;title=Epsql_%28experimental_psql%29"/>
	<link rel="alternate" type="text/html" href="http://postgres.cz/index.php?title=Epsql_(experimental_psql)&amp;action=history"/>
	<updated>2026-06-02T21:56:18Z</updated>
	<subtitle>Historie editací této stránky</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>http://postgres.cz/index.php?title=Epsql_(experimental_psql)&amp;diff=449&amp;oldid=prev</id>
		<title>imported&gt;Pavel: Nová stránka: ==epsql== epsql (experimental psql) je čistě privátní záležitost. SQL konzole psql musí za všech okolností a všech prostředích pracovat bez chyb. Je to první aplikac...</title>
		<link rel="alternate" type="text/html" href="http://postgres.cz/index.php?title=Epsql_(experimental_psql)&amp;diff=449&amp;oldid=prev"/>
		<updated>2009-03-09T11:31:02Z</updated>

		<summary type="html">&lt;p&gt;Nová stránka: ==epsql== &lt;a href=&quot;/wiki/Epsql_(experimental_psql)&quot; title=&quot;Epsql (experimental psql)&quot;&gt;epsql (experimental psql)&lt;/a&gt; je čistě privátní záležitost. SQL konzole psql musí za všech okolností a všech prostředích pracovat bez chyb. Je to první aplikac...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==epsql==&lt;br /&gt;
[[epsql (experimental psql)]] je čistě privátní záležitost. SQL konzole psql musí za všech okolností a všech prostředích pracovat bez chyb. Je to první aplikace, prostřednictvím ní uživatel získá první dojem o PostgreSQL. Tudíž jsou core vývojáři poměrně hodně nedůtkliví ohledně požadavků na přidávání nových funkcí. Je to hodně konzervativní aplikace - podobně jako Oraclovské sqlplus. Tudíž jsem udělal vlastní fork. Pár dní jsem si hrál a psql upravil tak, že používá UTF rámečky a ANSI escape kódy pro zvýraznění záhlaví tabulek (a kromě toho, to rozumně zalamuje (v mezerách)). epsql jsem je tzv [http://cs.wikipedia.org/wiki/Cardware postcardware], takže jestli se Vám epsql líbí, pošlete pohlednici na adresu uvedenou v README.&lt;br /&gt;
===Rozšířená podpora stylů===&lt;br /&gt;
K dispozici jsou 4 styly rámečků a 7 stylů vykreslení. Je možné nastavit escape sekvenci (barvy a zvýraznění) pro řádek se záhlavím sloupců a pro jednotlivá záhlaví.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
postgres=# \pset borderlinestyle 0&lt;br /&gt;
Border line style is 0.&lt;br /&gt;
postgres=# \pset border 2&lt;br /&gt;
Border style is 2.&lt;br /&gt;
postgres=# \l&lt;br /&gt;
                                   List of databases&lt;br /&gt;
+-----------+----------+----------+-------------+-------------+-----------------------+&lt;br /&gt;
| Name      | Owner    | Encoding | Collation   | Ctype       | Access privileges     |&lt;br /&gt;
+-----------+----------+----------+-------------+-------------+-----------------------+&lt;br /&gt;
| postgres  | postgres | UTF8     | cs_CZ.UTF-8 | cs_CZ.UTF-8 |                       |&lt;br /&gt;
| template0 | postgres | UTF8     | cs_CZ.UTF-8 | cs_CZ.UTF-8 | =c/postgres           |&lt;br /&gt;
|                                                             : postgres=CTc/postgres |&lt;br /&gt;
| template1 | postgres | UTF8     | cs_CZ.UTF-8 | cs_CZ.UTF-8 | =c/postgres           |&lt;br /&gt;
|                                                             : postgres=CTc/postgres |&lt;br /&gt;
+-----------+----------+----------+-------------+-------------+-----------------------+&lt;br /&gt;
(3 rows)&lt;br /&gt;
&lt;br /&gt;
postgres=# \pset borderlinestyle 1&lt;br /&gt;
Border line style is 1.&lt;br /&gt;
postgres=# \pset border 3&lt;br /&gt;
Border style is 3.&lt;br /&gt;
postgres=# \l&lt;br /&gt;
                                   List of databases&lt;br /&gt;
┌───────────┬──────────┬──────────┬─────────────┬─────────────┬───────────────────────┐&lt;br /&gt;
│ Name      │ Owner    │ Encoding │ Collation   │ Ctype       │ Access privileges     │&lt;br /&gt;
├───────────┼──────────┼──────────┼─────────────┼─────────────┼───────────────────────┤&lt;br /&gt;
│ postgres  │ postgres │ UTF8     │ cs_CZ.UTF-8 │ cs_CZ.UTF-8 │                       │&lt;br /&gt;
├───────────┼──────────┼──────────┼─────────────┼─────────────┼───────────────────────┤&lt;br /&gt;
│ template0 │ postgres │ UTF8     │ cs_CZ.UTF-8 │ cs_CZ.UTF-8 │ =c/postgres           │&lt;br /&gt;
│           ┊          ┊          ┊             ┊             : postgres=CTc/postgres │&lt;br /&gt;
├───────────┼──────────┼──────────┼─────────────┼─────────────┼───────────────────────┤&lt;br /&gt;
│ template1 │ postgres │ UTF8     │ cs_CZ.UTF-8 │ cs_CZ.UTF-8 │ =c/postgres           │&lt;br /&gt;
│           ┊          ┊          ┊             ┊             : postgres=CTc/postgres │&lt;br /&gt;
└───────────┴──────────┴──────────┴─────────────┴─────────────┴───────────────────────┘&lt;br /&gt;
(3 rows)&lt;br /&gt;
&lt;br /&gt;
postgres=# \pset border 2&lt;br /&gt;
Border style is 2.&lt;br /&gt;
postgres=# \pset borderlinestyle 3&lt;br /&gt;
Border line style is 3.&lt;br /&gt;
postgres=# \l&lt;br /&gt;
                                   List of databases&lt;br /&gt;
╔═══════════╤══════════╤══════════╤═════════════╤═════════════╤═══════════════════════╗&lt;br /&gt;
║ Name      │ Owner    │ Encoding │ Collation   │ Ctype       │ Access privileges     ║&lt;br /&gt;
╟───────────┼──────────┼──────────┼─────────────┼─────────────┼───────────────────────╢&lt;br /&gt;
║ postgres  │ postgres │ UTF8     │ cs_CZ.UTF-8 │ cs_CZ.UTF-8 │                       ║&lt;br /&gt;
║ template0 │ postgres │ UTF8     │ cs_CZ.UTF-8 │ cs_CZ.UTF-8 │ =c/postgres           ║&lt;br /&gt;
║           ┊          ┊          ┊             ┊             : postgres=CTc/postgres ║&lt;br /&gt;
║ template1 │ postgres │ UTF8     │ cs_CZ.UTF-8 │ cs_CZ.UTF-8 │ =c/postgres           ║&lt;br /&gt;
║           ┊          ┊          ┊             ┊             : postgres=CTc/postgres ║&lt;br /&gt;
╚═══════════╧══════════╧══════════╧═════════════╧═════════════╧═══════════════════════╝&lt;br /&gt;
(3 rows)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Číslování řádků výpisu zdrojového kódu funkce===&lt;br /&gt;
Funkce, která mi hodně chyběla je listing funkce s číslováním řádků. Proto je v epsql. Metapříkaz \lf má odlehčenou variantu - se symbolem mínus. V případě použití odlehčené varianty se nečíslují řádky výpisu.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
postgres=# select test(10);&lt;br /&gt;
ERROR:  division by zero&lt;br /&gt;
CONTEXT:  PL/pgSQL function &amp;quot;test&amp;quot; line 3 at assignment&lt;br /&gt;
&lt;br /&gt;
postgres=# \lf test&lt;br /&gt;
***	CREATE OR REPLACE FUNCTION public.test(a integer)&lt;br /&gt;
***	 RETURNS integer&lt;br /&gt;
***	 LANGUAGE plpgsql&lt;br /&gt;
***	AS $function$&lt;br /&gt;
  1	declare b int; &lt;br /&gt;
  2	begin&lt;br /&gt;
  3	  b := a/0;&lt;br /&gt;
  4	  return a;&lt;br /&gt;
  5	end;&lt;br /&gt;
***	$function$&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Integrace kurzorů===&lt;br /&gt;
V psql se docela nepohodlně přenášejí data z databáze k dalšímu zpracování. Co umí psql dobře, je zobrazení výsledku dotazu. Pro cokoliv ostatního je skoro jednodušší si napsat uloženou proceduru nebo skript v bashi. Pokusem o vyřešení omezenosti psql je integrace podpory kurzorů - metapříkazy &amp;#039;&amp;#039;\fetch&amp;#039;&amp;#039; a &amp;#039;&amp;#039;\fetchall&amp;#039;&amp;#039;. Metapříkaz fetch přečte záznam z kurzoru a jeho obsah uloží do psql proměnných. S obsahem těchto proměnných pak můžeme dále pracovat:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
postgres=# BEGIN;&lt;br /&gt;
BEGIN&lt;br /&gt;
postgres=# DECLARE c CURSOR FOR SELECT * FROM pg_database;&lt;br /&gt;
DECLARE CURSOR&lt;br /&gt;
postgres=# \fetch c \echo :datname :datcollate&lt;br /&gt;
template1 cs_CZ.UTF-8&lt;br /&gt;
postgres=# \fetch c \echo :datname :datcollate&lt;br /&gt;
template0 cs_CZ.UTF-8&lt;br /&gt;
postgres=# \fetch c \echo :datname :datcollate&lt;br /&gt;
postgres cs_CZ.UTF-8&lt;br /&gt;
postgres=# \fetch c \echo :datname :datcollate&lt;br /&gt;
ERROR:  (not available)&lt;br /&gt;
postgres=# COMMIT;&lt;br /&gt;
COMMIT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Metapříkaz &amp;#039;&amp;#039;\fetchall&amp;#039;&amp;#039; provede totéž co příkaz fetch a navíc pro každý záznam všechny příkazy v psql bloku - tj. na jednom řádku:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
postgres=# CREATE TABLE test1(a int); CREATE TABLE test2(a int);&lt;br /&gt;
CREATE TABLE&lt;br /&gt;
CREATE TABLE&lt;br /&gt;
postgres=# BEGIN;&lt;br /&gt;
BEGIN&lt;br /&gt;
postgres=# DECLARE c CURSOR FOR SELECT tablename FROM pg_tables WHERE tablename LIKE &amp;#039;test%&amp;#039;;&lt;br /&gt;
DECLARE CURSOR&lt;br /&gt;
postgres=# \fetchall c DROP TABLE :tablename; &lt;br /&gt;
DROP TABLE&lt;br /&gt;
DROP TABLE&lt;br /&gt;
postgres=# COMMIT;&lt;br /&gt;
COMMIT&lt;br /&gt;
postgres=# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>imported&gt;Pavel</name></author>
	</entry>
</feed>