<?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=PgBash_%28de%29</id>
	<title>PgBash (de) - Historie editací</title>
	<link rel="self" type="application/atom+xml" href="http://postgres.cz/index.php?action=history&amp;feed=atom&amp;title=PgBash_%28de%29"/>
	<link rel="alternate" type="text/html" href="http://postgres.cz/index.php?title=PgBash_(de)&amp;action=history"/>
	<updated>2026-04-29T20:43:52Z</updated>
	<subtitle>Historie editací této stránky</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>http://postgres.cz/index.php?title=PgBash_(de)&amp;diff=282&amp;oldid=prev</id>
		<title>imported&gt;WikiSysop: Stránka PgBashDeutsch přemístěna na stránku PgBash (de): Konvence</title>
		<link rel="alternate" type="text/html" href="http://postgres.cz/index.php?title=PgBash_(de)&amp;diff=282&amp;oldid=prev"/>
		<updated>2007-05-22T15:11:27Z</updated>

		<summary type="html">&lt;p&gt;Stránka &lt;a href=&quot;/wiki/PgBashDeutsch&quot; class=&quot;mw-redirect&quot; title=&quot;PgBashDeutsch&quot;&gt;PgBashDeutsch&lt;/a&gt; přemístěna na stránku &lt;a href=&quot;/wiki/PgBash_(de)&quot; title=&quot;PgBash (de)&quot;&gt;PgBash (de)&lt;/a&gt;: Konvence&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[category:Articles]]&lt;br /&gt;
Die Übersetzung: Jan Novák&lt;br /&gt;
&lt;br /&gt;
Sie können PgBash wie  binäre Datei download, oder können Sie aus  [http://www.psn.co.jp/PostgreSQL/pgbash/download-e.html den Ursprungskoden] übersetzen. Sie sind in der Patch für Bash  Applikationsform, darum müssen Sie die Ursprungskoden für entsprechende Version des Bash haben.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/local/bin/pgbash&lt;br /&gt;
connect to testdb011;&lt;br /&gt;
SELECT Name FROM Namen; | less&lt;br /&gt;
disconnect all;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sowohl benutzen wir die Veränderliche in der Order von Shell, als auch können wir die Veränderliche in SQL benutzen. Pgbash gibt zur SQL-Order SELECT die Möglichkeit der Wert der Zahlenspalte von Shell zuordnen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/local/bin/pgbash&lt;br /&gt;
connect to testdb011;&lt;br /&gt;
SELECT COUNT(Name) INTO :pName FROM Namen &lt;br /&gt;
  WHERE Name LIKE &amp;#039;$1%&amp;#039;; &amp;gt; /dev/null&lt;br /&gt;
echo &amp;quot;mit Vorzeichenoperator $1 beginnt $pName der Namen&amp;quot;&lt;br /&gt;
disconnect all;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nach der Ausführung der Frage können wir &amp;quot;eingebaute&amp;quot; Veränderliche $SQLCODE, $SQLERRD2 und andere prüfen. Wenn SQL-Order mit dem Fehler beendet hat, dann $SQLCODE wird die Fehlernummer enthalten. Anders sie enthält 0 (wir können $SQL_OK benutzen). $SQLERRD2 enthält die Zahl der  zurückgesetzten Zeile.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/local/bin/pgbash&lt;br /&gt;
connect to testdb011;&lt;br /&gt;
SELECT c.relname FROM pg_catalog.pg_class c &lt;br /&gt;
  WHERE c.relkind = &amp;#039;r&amp;#039; AND pg_catalog.pg_table_is_visible(c.oid) &lt;br /&gt;
    AND c.relname = &amp;#039;meineTabelle&amp;#039;; &amp;gt; /dev/null&lt;br /&gt;
# Tabelle wird nur in der Fall herausbildet, wenn sie noch nicht existiert&lt;br /&gt;
if [ $SQLERRD2 = 0 ]; then&lt;br /&gt;
  CREATE TABLE meineTabelle (&lt;br /&gt;
    a integer,&lt;br /&gt;
    b integer&lt;br /&gt;
  );&lt;br /&gt;
fi&lt;br /&gt;
disconnect all;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Iteration über zurückgesetzten Tabellenzeile  ist möglich durch die Cursoren. Skript, das ersten $2 Zeilen aus der Tabelle Namen ausgeschrieben wird, sieht folgt aus (erste Parametr des Skript ist Vorzeichenoperator den Namen):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/local/bin/pgbash&lt;br /&gt;
connect to testdb011;&lt;br /&gt;
BEGIN;&lt;br /&gt;
DECLARE c CURSOR FOR &lt;br /&gt;
  SELECT Name FROM Namen WHERE Name LIKE &amp;#039;$1%&amp;#039;;&lt;br /&gt;
lines=1&lt;br /&gt;
FETCH IN c INTO :Name;&lt;br /&gt;
while [ $SQLCODE -eq $SQL_OK ]; do&lt;br /&gt;
  if [ $lines -gt $2 ] ; then&lt;br /&gt;
    break&lt;br /&gt;
  fi&lt;br /&gt;
  echo $Name&lt;br /&gt;
  let &amp;quot;lines+=1&amp;quot;&lt;br /&gt;
  FETCH IN c INTO :Name;&lt;br /&gt;
done&lt;br /&gt;
END;&lt;br /&gt;
disconnect all;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Wir können Pgbash für Bildung des automatisierten Installationskript benutzen, einschließlich Daten füllen  - (pgbash unterstützt dynamischen Anschlussumschaltung). Im erten Anschluss kann man die Tabelle lesen, im zweiten die verlesen Zeile in die Tabelle schreiben.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/local/bin/pgbash&lt;br /&gt;
connect to testdb1@kix as db1;&lt;br /&gt;
connect to testfce as db2;&lt;br /&gt;
&lt;br /&gt;
set connection db2;&lt;br /&gt;
&lt;br /&gt;
BEGIN;&lt;br /&gt;
  DECLARE c CURSOR FOR&lt;br /&gt;
  SELECT * FROM t1;&lt;br /&gt;
  FETCH IN c INTO :c1, :c2;&lt;br /&gt;
  while [ $SQLCODE -eq $SQL_OK ]; do&lt;br /&gt;
    set connection db1;&lt;br /&gt;
    INSERT INTO t1 VALUES($c1,\&amp;#039;$c2\&amp;#039;);&lt;br /&gt;
    set connection db2;&lt;br /&gt;
    FETCH IN c INTO :c1, :c2;&lt;br /&gt;
  done&lt;br /&gt;
END;&lt;br /&gt;
disconnect all;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Durch PgBash kann man Dateibaseverwaltung oder Systemverwaltung automatisieren. Bei der Automation der Dateibaseverwaltung können wir periodischen Applikationanlauf (cron), Dateisystemzugriff (export und import), Zugriff zu systemen Veränderlichen benutzen.Wir wahrscheinlich benutzen PgBash für die Systemverwaltung in diese Fälle, wenn Anfangsdaten werden in einige Dateibase abgelegt (die Benutzerliste, die Computerliste und so weiter).&lt;br /&gt;
&lt;br /&gt;
Folgende Beispiel hebt diese Dateibasen auf, derer Name vom Eigner ist in der Klausel LIKE. Ich zeige zwei Varianten von der Order an. Die erste benutzt den Fakt, dass man SQL-Order mit `` machen kann. Das Ergebnis ist dann die Folge, die  mehrzeiligen Text enthaltet.Die zweite Variante benutzt den Cursor. Weil wir der Cursor nur in der Transaktion benutzen können und bei der geöffneten Transaktion kann man nicht der Order DROP DATABASE benutzen, muss das Skript zwei Zyklen enthalten.&lt;br /&gt;
&lt;br /&gt;
Variante Nummer 1&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/local/bin/pgbash&lt;br /&gt;
connect to template1;&lt;br /&gt;
&lt;br /&gt;
set option_header=off;&lt;br /&gt;
set option_bottom=off;&lt;br /&gt;
set option_alignment=off;&lt;br /&gt;
set option_separator=;&lt;br /&gt;
&lt;br /&gt;
dblist=`SELECT d.datname FROM &lt;br /&gt;
          pg_catalog.pg_database d LEFT JOIN pg_catalog.pg_user u &lt;br /&gt;
          ON d.datdba = u.usesysid WHERE u.usename LIKE &amp;#039;$1&amp;#039;;`&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$dblist&amp;quot; != &amp;quot;&amp;quot; ]; then&lt;br /&gt;
  echo &amp;quot;$dblist&amp;quot; | while read db; do&lt;br /&gt;
    echo &amp;quot;Ich mache Dateibase $db weg&amp;quot;&lt;br /&gt;
    DROP DATABASE \&amp;quot;$db\&amp;quot;;&lt;br /&gt;
  done&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
disconnect all;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variante Nummer 2&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/local/bin/pgbash&lt;br /&gt;
connect to template1;&lt;br /&gt;
&lt;br /&gt;
BEGIN;&lt;br /&gt;
DECLARE c CURSOR FOR &lt;br /&gt;
        SELECT d.datname FROM &lt;br /&gt;
          pg_catalog.pg_database d LEFT JOIN pg_catalog.pg_user u &lt;br /&gt;
          ON d.datdba = u.usesysid WHERE u.usename LIKE &amp;#039;$1&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
FETCH IN c INTO :dbname;&lt;br /&gt;
while [ $SQLCODE -eq $SQL_OK ]; do&lt;br /&gt;
  dblist=&amp;quot;$dblist \&amp;quot;$dbname\&amp;quot;&amp;quot;&lt;br /&gt;
  FETCH IN c INTO :dbname;&lt;br /&gt;
done&lt;br /&gt;
END;&lt;br /&gt;
eval &amp;#039;for i in &amp;#039;&amp;quot;$dblist&amp;quot;&amp;#039;; do eval &amp;quot;DROP DATABASE&lt;br /&gt;
       \&amp;quot;$i\&amp;quot;;&amp;quot;; done&amp;#039;&lt;br /&gt;
disconnect all;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn wir am 1. März alle Dateibasen von den Benutzer von GROUPXX aufheben möchten, dann geben wir CRON der Zeilen in die Tabelle (der Order cron -e) (ich setze voraus, dass ein Skript in der Datei &amp;#039;dropdbs.psh&amp;#039; abgelegt ist.):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      0 0 1 3 * dropdbs.psh group% &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Man kann Pgbash als wrapper (der Packer) den plpgsql Prozeduren benutzen - Skript des PgBash kann man als einfaches Interface benutzen, das die Parametern zur gelagerten Prozedur gibt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/local/bin/pgbash&lt;br /&gt;
connect to template1&lt;br /&gt;
SELECT drop_students_databases($1) INTO :zd;&lt;br /&gt;
if [ $SQLCODE = $SQL_OK ]; then&lt;br /&gt;
  echo &amp;quot;Es wurde $zd Dateibasen gelöscht&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
disconnect all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In PgBash kann man auch einfache CGI-Skript machen - in PgBash ist die Mode für CGI, wann der Output in der HTML Tabelle formatiert ist.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/local/bin/pgbash&lt;br /&gt;
connect to testdb011;&lt;br /&gt;
echo &amp;quot;Content-type: text/html&amp;quot;&lt;br /&gt;
echo &amp;quot;&amp;quot;&lt;br /&gt;
set EXEC_SQL_OPTION CGI;&lt;br /&gt;
echo &amp;quot;&amp;lt;HTML&amp;gt;&amp;quot;&lt;br /&gt;
echo &amp;quot;&amp;lt;BODY&amp;gt;&amp;quot;&lt;br /&gt;
SELECT * FROM Namen WHERE Name LIKE &amp;#039;S%&amp;#039;;&lt;br /&gt;
echo &amp;quot;&amp;lt;/BODY&amp;gt;&amp;quot;&lt;br /&gt;
echo &amp;quot;&amp;lt;/HTML&amp;gt;&amp;quot;&lt;br /&gt;
disconnect all;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Man kann Pgbash als wrapper (der Packer) den SQL-Order benutzen - man kann die Programmschnittstelle für beliebige SQL-Order schreiben (sieh Beispiel am Anfang des Text).  PgBash leider kann nicht die Einstellung der Formatierung von Spalten und Tabellen (so, wie es zb. in SQL*Plus in RDBMS Oracle ist), und so kann man PgBash inzwischen für die Listenerstellung (parametrieren die Order SELECT) nicht benutzen. &lt;br /&gt;
&lt;br /&gt;
PgBash bietet nicht so viel editierungs Komfort (hat nicht so viel Bedienungsfreundlichkeit) wie psql an. Aber man kann es dort benutzen, wo die Fähigkeiten von PSQL inzwischen ungenügend sind. PgBash bietet parametrisation der SQL-Ordern und primäre Programmkonstruktion (if, while, for) an. Bevor PSQL diese Möglichkeiten können wird, hat PgBash seinen Platz an der Sonne und für alle, die täglich PostgreSQL benutzen, ist es unersetzlicher Helfer.&lt;/div&gt;</summary>
		<author><name>imported&gt;WikiSysop</name></author>
	</entry>
</feed>