SlideShare une entreprise Scribd logo
1  sur  24
Télécharger pour lire hors ligne
Spaß mit PostgreSQL

       Peter Eisentraut


Chemnitzer Linux-Tage 2009




   Peter Eisentraut   Spaß mit PostgreSQL
Der Anfang allen Übels . . .




  Procedural Languages:
      beliebige Programmiersprachen im PostgreSQL-Server
      ausführen
          Perl, Python, Tcl, Ruby, Java, etc.
      für Anwendungslogik
      Anbindung an externe Bibliotheken




                       Peter Eisentraut   Spaß mit PostgreSQL
Procedural Languages: Beispiel



  CREATE OR REPLACE FUNCTION email_name(email text)
  RETURNS text
  LANGUAGE plperlu
  AS $$
  use Email::Address;

  my @addresses = Email::Address->parse($_[0]);
  return undef unless scalar(@addresses) > 0;
  return $addresses[0]->name;
  $$;




                 Peter Eisentraut   Spaß mit PostgreSQL
Beispiel PL/sh



  Code mit beliebigen Shells:

  CREATE FUNCTION email(addr text, subj text,
                        body text)
  RETURNS void
  LANGUAGE plsh
  AS $$
  #!/bin/sh
  echo "$3" | mail -s "$2" "$1"
  $$;




                      Peter Eisentraut   Spaß mit PostgreSQL
PL(/sh) Interna




     Quelltext kann beliebig verarbeitet werden, mit Bibliothek,
     Interpreter o. ä.
     PL/sh kopiert Quelltext in temporäre Datei
     Interpreter wird anhand #! ausgesucht
     Argument sind in $1, . . .
     Eingeschränkte Flexibilität bei Triggern




                       Peter Eisentraut   Spaß mit PostgreSQL
PL/sh Demo




  Benachrichtigungen über Updates senden




                     Peter Eisentraut   Spaß mit PostgreSQL
PL Demo mit GUI




  PL/Perl ist flexibiler bei der Bearbeitung von Triggern




                       Peter Eisentraut   Spaß mit PostgreSQL
PL/LOLCODE
 create or replace function lol_pi() returns float immutable
 language pllolcode as $$
 HAI
     I HAS A PIADD ITZ 0.0
     I HAS A PISUB ITZ 0.0
     I HAS A ITR ITZ 0
     I HAS A ITRZ ITZ 20000
     I HAS A T1
     I HAS A T2

     IM IN YR LOOP
         T1 R QUOSHUNT OF 4.0 AN SUM OF 3.0 AN ITR
         T2 R QUOSHUNT OF 4.0 AN SUM OF 5.0 AN ITR
         PISUB R SUM OF PISUB AN T1
         PIADD R SUM OF PIADD AN T2
         ITR R SUM OF ITR AN 4.0
         BOTH SAEM ITR AN BIGGR OF ITR AN ITRZ, O RLY?
             YA RLY, GTFO
         OIC
     IM OUTTA YR LOOP
     FOUND YR SUM OF 4.0 AN DIFF OF PIADD AN PISUB
 KTHXBYE
 $$;

                      Peter Eisentraut   Spaß mit PostgreSQL
psql Customization




  Initialisierungsdatei ~/.psqlrc oder /etc/psqlrc
  set QUIET yes
  pset null _null_
  set HISTCONTROL ignoredups
  set VERBOSITY verbose
  set PROMPT1 ’%[%033[1;32;40m%]%n@%m:%~%x%R%#%[%033[0m%] ’
  set PROMPT2 :PROMPT1




                     Peter Eisentraut   Spaß mit PostgreSQL
Rekursive Anfragen: Beispiel



  WITH RECURSIVE Z(IX, IY, CX, CY, X, Y, I) AS (
      SELECT IX, IY, X::float, Y::float, X::float, Y::float, 0
          FROM (select -2.2 + 0.031 * i, i from generate_series(0,101) as i) as xgen(x,ix),
               (select -1.5 + 0.031 * i, i from generate_series(0,101) as i) as ygen(y,iy)
      UNION ALL
      SELECT IX, IY, CX, CY, X * X - Y * Y + CX AS X, Y * X * 2 + CY, I + 1
          FROM Z
          WHERE X * X + Y * Y < 16::float
                AND I < 100
  )
  SELECT array_to_string(array_agg(SUBSTRING(’ .,,,-----++++%%%%@@@@#### ’,
                                   LEAST(GREATEST(I,1),27), 1)),’’)
  FROM ( SELECT IX, IY, MAX(I) AS I FROM Z GROUP BY IY, IX ORDER BY IY, IX ) AS ZT
  GROUP BY IY
  ORDER BY IY;




                              Peter Eisentraut   Spaß mit PostgreSQL
Rekursive Anfragen: Wie funktioniert’s?



   1   Nicht-rekursiven Teil ausführen, in Ergebnistabelle und
       Arbeitstabelle speichern
   2   Wenn Arbeitstabelle nicht leer, dann . . .
   3   Rekursiven Teil ausführen, mit Arbeitstabelle anstelle
       Platzhalter, an Ergebnistabelle anhängen und in
       Zwischentabelle speichern
   4   Zwischentabelle in Arbeitstabelle übertragen
   5   wiederholen




                        Peter Eisentraut   Spaß mit PostgreSQL
Rekursive Anfragen: Beispiel 2


  CREATE TABLE teile (
     ganzes text,
     teil text,
     menge int
  );

  INSERT INTO teile VALUES (’Auto’, ’Motor’, 1),
                           (’Auto’, ’Rad’, 4),
                           (’Motor’, ’Zylinderkopf’, 1),
                           (’Rad’, ’Schraube’, 5),
                           (’Zylinderkopf’, ’Schraube’, 14);

  WITH RECURSIVE enthaltene_teile(ganzes, teil, menge) AS (
      SELECT ganzes, teil, menge FROM teile WHERE ganzes = ’Auto’
    UNION ALL
      SELECT t.ganzes, t.teil, t.menge * et.menge
      FROM enthaltene_teile et, teile t
      WHERE t.ganzes = et.teil
    )
  SELECT teil, SUM(menge) AS gesamtmenge
  FROM enthaltene_teile
  GROUP BY teil;




                              Peter Eisentraut   Spaß mit PostgreSQL
Rekursive Anfragen: Beispiel 3




                  Peter Eisentraut   Spaß mit PostgreSQL
Einbindung externer Daten




     andere PostgreSQL-Systeme abfragen
     andere DBMS-Typen abfragen
     Nicht-SQL-Daten lesen (CSV, XML)




                   Peter Eisentraut   Spaß mit PostgreSQL
Externe Daten: Beispiel




  DBI-Link: externe DBI-kompatible Datenquellen als
  PostgreSQL-Tabellen darstellen
  z.B. MySQL über PostgreSQL




                      Peter Eisentraut   Spaß mit PostgreSQL
Externe Daten: Beispiel 2




  Also gehen auch beliebige Daten, z. B. DBD::CSV oder
  DBD::AnyData . . .
  Nette Idee, geht aber nicht: Diese Treiber exportieren
  table_info und/oder column_info nicht.




                      Peter Eisentraut   Spaß mit PostgreSQL
Externe Daten: Beispiel 2




  Also gehen auch beliebige Daten, z. B. DBD::CSV oder
  DBD::AnyData . . .
  Nette Idee, geht aber nicht: Diese Treiber exportieren
  table_info und/oder column_info nicht.




                      Peter Eisentraut   Spaß mit PostgreSQL
Externe Daten: SQL/MED


  “Management of External Data”
       Teil des SQL-Standards
       Implementierung geplant ab PostgreSQL 8.5
       vereinheitlicht diverse bestehende Ad-Hoc-Lösungen
       evtl. auch Unterstützung für abenteuerliche Quellformate
  (Teil-)Beispiel:

  CREATE FOREIGN TABLE data
    SERVER extradb
    OPTIONS (tablename ’DATA123’);




                       Peter Eisentraut   Spaß mit PostgreSQL
Web Services




  Beispiel Google Translate




                      Peter Eisentraut   Spaß mit PostgreSQL
PostgreSQL und Mobiltelefone



  Probleme:
      RAM
      Flash-Speicher
      POSIX-API
      CPU mit Spinlocks
      (Geschwindigkeit?)
  PostgreSQL-Server auf Handy geht wohl (noch) nicht.




                       Peter Eisentraut   Spaß mit PostgreSQL
PostgreSQL GUIs und Mobiltelefone




     psql nativ nicht portiert
     psql über ssh geht gut
     phpPgAdmin geht gut
     pgAdmin III geht (noch) nicht
     pgPhoneHome




                       Peter Eisentraut   Spaß mit PostgreSQL
Externe Daten umgekehrt




  Wie administrieren?
      psql ist zu spartanisch
      pgAdmin ist Mist :-/
      Erst wollte ich einen kioslave schreiben . . .
      mc ist am besten
      . . . aber Plugin schreiben wollte ich nicht.




                        Peter Eisentraut   Spaß mit PostgreSQL
PostgreSQL und FUSE




               Peter Eisentraut   Spaß mit PostgreSQL
Zusammenfassung




    Mit . . .
    vielen Programmiersprachen,
    vielen Bibliotheken,
    vielen Datenquelllen,
    vielen Schnittstellen
    . . . ist ’ne Menge Unsinn möglich.
    (Aber nicht aller funktioniert.)




                      Peter Eisentraut   Spaß mit PostgreSQL

Contenu connexe

Similaire à Spaß mit PostgreSQL

nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins
nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins
nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins Christian Kauhaus
 
Funktionales Programmieren mit Clojure
Funktionales Programmieren mit ClojureFunktionales Programmieren mit Clojure
Funktionales Programmieren mit ClojureDr. Christian Betz
 
Java Streams und Lambdas
Java Streams und LambdasJava Streams und Lambdas
Java Streams und LambdasNane Kratzke
 
Tech Talk: Pyparsing
Tech Talk: PyparsingTech Talk: Pyparsing
Tech Talk: Pyparsingschlauch
 
Parallele Softwareentwicklung mit .NET 4.0
Parallele Softwareentwicklung mit .NET 4.0Parallele Softwareentwicklung mit .NET 4.0
Parallele Softwareentwicklung mit .NET 4.0Qiong Wu
 
Perl - die Taschenkettensäge unter den Programmiersprachen - Vortrag 2003
Perl - die Taschenkettensäge unter den Programmiersprachen - Vortrag 2003Perl - die Taschenkettensäge unter den Programmiersprachen - Vortrag 2003
Perl - die Taschenkettensäge unter den Programmiersprachen - Vortrag 2003Brigitte Jellinek
 
Eine Reise durch den PostgreSQL Optimizer
Eine Reise durch den PostgreSQL OptimizerEine Reise durch den PostgreSQL Optimizer
Eine Reise durch den PostgreSQL Optimizerpsoo1978
 
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin Grauel
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin GrauelOSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin Grauel
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin GrauelNETWAYS
 

Similaire à Spaß mit PostgreSQL (11)

nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins
nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins
nagiosplugin - eine Python-Biblioth­ek für Monitoring-Plug­ins
 
Funktionales Programmieren mit Clojure
Funktionales Programmieren mit ClojureFunktionales Programmieren mit Clojure
Funktionales Programmieren mit Clojure
 
Web Entwicklung mit PHP - Teil 1
Web Entwicklung mit PHP - Teil 1Web Entwicklung mit PHP - Teil 1
Web Entwicklung mit PHP - Teil 1
 
Java Streams und Lambdas
Java Streams und LambdasJava Streams und Lambdas
Java Streams und Lambdas
 
Tech Talk: Pyparsing
Tech Talk: PyparsingTech Talk: Pyparsing
Tech Talk: Pyparsing
 
Pyparsing
PyparsingPyparsing
Pyparsing
 
Parallele Softwareentwicklung mit .NET 4.0
Parallele Softwareentwicklung mit .NET 4.0Parallele Softwareentwicklung mit .NET 4.0
Parallele Softwareentwicklung mit .NET 4.0
 
Perl - die Taschenkettensäge unter den Programmiersprachen - Vortrag 2003
Perl - die Taschenkettensäge unter den Programmiersprachen - Vortrag 2003Perl - die Taschenkettensäge unter den Programmiersprachen - Vortrag 2003
Perl - die Taschenkettensäge unter den Programmiersprachen - Vortrag 2003
 
Eine Reise durch den PostgreSQL Optimizer
Eine Reise durch den PostgreSQL OptimizerEine Reise durch den PostgreSQL Optimizer
Eine Reise durch den PostgreSQL Optimizer
 
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin Grauel
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin GrauelOSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin Grauel
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin Grauel
 
TypeScript
TypeScriptTypeScript
TypeScript
 

Plus de Peter Eisentraut

Programming with Python and PostgreSQL
Programming with Python and PostgreSQLProgramming with Python and PostgreSQL
Programming with Python and PostgreSQLPeter Eisentraut
 
Getting Started with PL/Proxy
Getting Started with PL/ProxyGetting Started with PL/Proxy
Getting Started with PL/ProxyPeter Eisentraut
 
Linux distribution for the cloud
Linux distribution for the cloudLinux distribution for the cloud
Linux distribution for the cloudPeter Eisentraut
 
Most Wanted: Future PostgreSQL Features
Most Wanted: Future PostgreSQL FeaturesMost Wanted: Future PostgreSQL Features
Most Wanted: Future PostgreSQL FeaturesPeter Eisentraut
 
Porting Applications From Oracle To PostgreSQL
Porting Applications From Oracle To PostgreSQLPorting Applications From Oracle To PostgreSQL
Porting Applications From Oracle To PostgreSQLPeter Eisentraut
 
Porting Oracle Applications to PostgreSQL
Porting Oracle Applications to PostgreSQLPorting Oracle Applications to PostgreSQL
Porting Oracle Applications to PostgreSQLPeter Eisentraut
 
XML Support: Specifications and Development
XML Support: Specifications and DevelopmentXML Support: Specifications and Development
XML Support: Specifications and DevelopmentPeter Eisentraut
 
PostgreSQL: Die Freie Datenbankalternative
PostgreSQL: Die Freie DatenbankalternativePostgreSQL: Die Freie Datenbankalternative
PostgreSQL: Die Freie DatenbankalternativePeter Eisentraut
 
The Road to the XML Type: Current and Future Developments
The Road to the XML Type: Current and Future DevelopmentsThe Road to the XML Type: Current and Future Developments
The Road to the XML Type: Current and Future DevelopmentsPeter Eisentraut
 
Access ohne Access: Freie Datenbank-Frontends
Access ohne Access: Freie Datenbank-FrontendsAccess ohne Access: Freie Datenbank-Frontends
Access ohne Access: Freie Datenbank-FrontendsPeter Eisentraut
 
Replication Solutions for PostgreSQL
Replication Solutions for PostgreSQLReplication Solutions for PostgreSQL
Replication Solutions for PostgreSQLPeter Eisentraut
 
Access ohne Access: Freie Datenbank-Frontends
Access ohne Access: Freie Datenbank-FrontendsAccess ohne Access: Freie Datenbank-Frontends
Access ohne Access: Freie Datenbank-FrontendsPeter Eisentraut
 
Docbook: Textverarbeitung mit XML
Docbook: Textverarbeitung mit XMLDocbook: Textverarbeitung mit XML
Docbook: Textverarbeitung mit XMLPeter Eisentraut
 
Collateral Damage: Consequences of Spam and Virus Filtering for the E-Mail Sy...
Collateral Damage: Consequences of Spam and Virus Filtering for the E-Mail Sy...Collateral Damage: Consequences of Spam and Virus Filtering for the E-Mail Sy...
Collateral Damage: Consequences of Spam and Virus Filtering for the E-Mail Sy...Peter Eisentraut
 
Collateral Damage: Consequences of Spam and Virus Filtering for the E-Mail S...
Collateral Damage:
Consequences of Spam and Virus Filtering for the E-Mail S...Collateral Damage:
Consequences of Spam and Virus Filtering for the E-Mail S...
Collateral Damage: Consequences of Spam and Virus Filtering for the E-Mail S...Peter Eisentraut
 
The Common Debian Build System (CDBS)
The Common Debian Build System (CDBS)The Common Debian Build System (CDBS)
The Common Debian Build System (CDBS)Peter Eisentraut
 

Plus de Peter Eisentraut (20)

Programming with Python and PostgreSQL
Programming with Python and PostgreSQLProgramming with Python and PostgreSQL
Programming with Python and PostgreSQL
 
Getting Started with PL/Proxy
Getting Started with PL/ProxyGetting Started with PL/Proxy
Getting Started with PL/Proxy
 
Linux distribution for the cloud
Linux distribution for the cloudLinux distribution for the cloud
Linux distribution for the cloud
 
Most Wanted: Future PostgreSQL Features
Most Wanted: Future PostgreSQL FeaturesMost Wanted: Future PostgreSQL Features
Most Wanted: Future PostgreSQL Features
 
Porting Applications From Oracle To PostgreSQL
Porting Applications From Oracle To PostgreSQLPorting Applications From Oracle To PostgreSQL
Porting Applications From Oracle To PostgreSQL
 
Porting Oracle Applications to PostgreSQL
Porting Oracle Applications to PostgreSQLPorting Oracle Applications to PostgreSQL
Porting Oracle Applications to PostgreSQL
 
PostgreSQL and XML
PostgreSQL and XMLPostgreSQL and XML
PostgreSQL and XML
 
XML Support: Specifications and Development
XML Support: Specifications and DevelopmentXML Support: Specifications and Development
XML Support: Specifications and Development
 
PostgreSQL: Die Freie Datenbankalternative
PostgreSQL: Die Freie DatenbankalternativePostgreSQL: Die Freie Datenbankalternative
PostgreSQL: Die Freie Datenbankalternative
 
The Road to the XML Type: Current and Future Developments
The Road to the XML Type: Current and Future DevelopmentsThe Road to the XML Type: Current and Future Developments
The Road to the XML Type: Current and Future Developments
 
Access ohne Access: Freie Datenbank-Frontends
Access ohne Access: Freie Datenbank-FrontendsAccess ohne Access: Freie Datenbank-Frontends
Access ohne Access: Freie Datenbank-Frontends
 
PostgreSQL and PL/Java
PostgreSQL and PL/JavaPostgreSQL and PL/Java
PostgreSQL and PL/Java
 
Replication Solutions for PostgreSQL
Replication Solutions for PostgreSQLReplication Solutions for PostgreSQL
Replication Solutions for PostgreSQL
 
PostgreSQL News
PostgreSQL NewsPostgreSQL News
PostgreSQL News
 
PostgreSQL News
PostgreSQL NewsPostgreSQL News
PostgreSQL News
 
Access ohne Access: Freie Datenbank-Frontends
Access ohne Access: Freie Datenbank-FrontendsAccess ohne Access: Freie Datenbank-Frontends
Access ohne Access: Freie Datenbank-Frontends
 
Docbook: Textverarbeitung mit XML
Docbook: Textverarbeitung mit XMLDocbook: Textverarbeitung mit XML
Docbook: Textverarbeitung mit XML
 
Collateral Damage: Consequences of Spam and Virus Filtering for the E-Mail Sy...
Collateral Damage: Consequences of Spam and Virus Filtering for the E-Mail Sy...Collateral Damage: Consequences of Spam and Virus Filtering for the E-Mail Sy...
Collateral Damage: Consequences of Spam and Virus Filtering for the E-Mail Sy...
 
Collateral Damage: Consequences of Spam and Virus Filtering for the E-Mail S...
Collateral Damage:
Consequences of Spam and Virus Filtering for the E-Mail S...Collateral Damage:
Consequences of Spam and Virus Filtering for the E-Mail S...
Collateral Damage: Consequences of Spam and Virus Filtering for the E-Mail S...
 
The Common Debian Build System (CDBS)
The Common Debian Build System (CDBS)The Common Debian Build System (CDBS)
The Common Debian Build System (CDBS)
 

Spaß mit PostgreSQL

  • 1. Spaß mit PostgreSQL Peter Eisentraut Chemnitzer Linux-Tage 2009 Peter Eisentraut Spaß mit PostgreSQL
  • 2. Der Anfang allen Übels . . . Procedural Languages: beliebige Programmiersprachen im PostgreSQL-Server ausführen Perl, Python, Tcl, Ruby, Java, etc. für Anwendungslogik Anbindung an externe Bibliotheken Peter Eisentraut Spaß mit PostgreSQL
  • 3. Procedural Languages: Beispiel CREATE OR REPLACE FUNCTION email_name(email text) RETURNS text LANGUAGE plperlu AS $$ use Email::Address; my @addresses = Email::Address->parse($_[0]); return undef unless scalar(@addresses) > 0; return $addresses[0]->name; $$; Peter Eisentraut Spaß mit PostgreSQL
  • 4. Beispiel PL/sh Code mit beliebigen Shells: CREATE FUNCTION email(addr text, subj text, body text) RETURNS void LANGUAGE plsh AS $$ #!/bin/sh echo "$3" | mail -s "$2" "$1" $$; Peter Eisentraut Spaß mit PostgreSQL
  • 5. PL(/sh) Interna Quelltext kann beliebig verarbeitet werden, mit Bibliothek, Interpreter o. ä. PL/sh kopiert Quelltext in temporäre Datei Interpreter wird anhand #! ausgesucht Argument sind in $1, . . . Eingeschränkte Flexibilität bei Triggern Peter Eisentraut Spaß mit PostgreSQL
  • 6. PL/sh Demo Benachrichtigungen über Updates senden Peter Eisentraut Spaß mit PostgreSQL
  • 7. PL Demo mit GUI PL/Perl ist flexibiler bei der Bearbeitung von Triggern Peter Eisentraut Spaß mit PostgreSQL
  • 8. PL/LOLCODE create or replace function lol_pi() returns float immutable language pllolcode as $$ HAI I HAS A PIADD ITZ 0.0 I HAS A PISUB ITZ 0.0 I HAS A ITR ITZ 0 I HAS A ITRZ ITZ 20000 I HAS A T1 I HAS A T2 IM IN YR LOOP T1 R QUOSHUNT OF 4.0 AN SUM OF 3.0 AN ITR T2 R QUOSHUNT OF 4.0 AN SUM OF 5.0 AN ITR PISUB R SUM OF PISUB AN T1 PIADD R SUM OF PIADD AN T2 ITR R SUM OF ITR AN 4.0 BOTH SAEM ITR AN BIGGR OF ITR AN ITRZ, O RLY? YA RLY, GTFO OIC IM OUTTA YR LOOP FOUND YR SUM OF 4.0 AN DIFF OF PIADD AN PISUB KTHXBYE $$; Peter Eisentraut Spaß mit PostgreSQL
  • 9. psql Customization Initialisierungsdatei ~/.psqlrc oder /etc/psqlrc set QUIET yes pset null _null_ set HISTCONTROL ignoredups set VERBOSITY verbose set PROMPT1 ’%[%033[1;32;40m%]%n@%m:%~%x%R%#%[%033[0m%] ’ set PROMPT2 :PROMPT1 Peter Eisentraut Spaß mit PostgreSQL
  • 10. Rekursive Anfragen: Beispiel WITH RECURSIVE Z(IX, IY, CX, CY, X, Y, I) AS ( SELECT IX, IY, X::float, Y::float, X::float, Y::float, 0 FROM (select -2.2 + 0.031 * i, i from generate_series(0,101) as i) as xgen(x,ix), (select -1.5 + 0.031 * i, i from generate_series(0,101) as i) as ygen(y,iy) UNION ALL SELECT IX, IY, CX, CY, X * X - Y * Y + CX AS X, Y * X * 2 + CY, I + 1 FROM Z WHERE X * X + Y * Y < 16::float AND I < 100 ) SELECT array_to_string(array_agg(SUBSTRING(’ .,,,-----++++%%%%@@@@#### ’, LEAST(GREATEST(I,1),27), 1)),’’) FROM ( SELECT IX, IY, MAX(I) AS I FROM Z GROUP BY IY, IX ORDER BY IY, IX ) AS ZT GROUP BY IY ORDER BY IY; Peter Eisentraut Spaß mit PostgreSQL
  • 11. Rekursive Anfragen: Wie funktioniert’s? 1 Nicht-rekursiven Teil ausführen, in Ergebnistabelle und Arbeitstabelle speichern 2 Wenn Arbeitstabelle nicht leer, dann . . . 3 Rekursiven Teil ausführen, mit Arbeitstabelle anstelle Platzhalter, an Ergebnistabelle anhängen und in Zwischentabelle speichern 4 Zwischentabelle in Arbeitstabelle übertragen 5 wiederholen Peter Eisentraut Spaß mit PostgreSQL
  • 12. Rekursive Anfragen: Beispiel 2 CREATE TABLE teile ( ganzes text, teil text, menge int ); INSERT INTO teile VALUES (’Auto’, ’Motor’, 1), (’Auto’, ’Rad’, 4), (’Motor’, ’Zylinderkopf’, 1), (’Rad’, ’Schraube’, 5), (’Zylinderkopf’, ’Schraube’, 14); WITH RECURSIVE enthaltene_teile(ganzes, teil, menge) AS ( SELECT ganzes, teil, menge FROM teile WHERE ganzes = ’Auto’ UNION ALL SELECT t.ganzes, t.teil, t.menge * et.menge FROM enthaltene_teile et, teile t WHERE t.ganzes = et.teil ) SELECT teil, SUM(menge) AS gesamtmenge FROM enthaltene_teile GROUP BY teil; Peter Eisentraut Spaß mit PostgreSQL
  • 13. Rekursive Anfragen: Beispiel 3 Peter Eisentraut Spaß mit PostgreSQL
  • 14. Einbindung externer Daten andere PostgreSQL-Systeme abfragen andere DBMS-Typen abfragen Nicht-SQL-Daten lesen (CSV, XML) Peter Eisentraut Spaß mit PostgreSQL
  • 15. Externe Daten: Beispiel DBI-Link: externe DBI-kompatible Datenquellen als PostgreSQL-Tabellen darstellen z.B. MySQL über PostgreSQL Peter Eisentraut Spaß mit PostgreSQL
  • 16. Externe Daten: Beispiel 2 Also gehen auch beliebige Daten, z. B. DBD::CSV oder DBD::AnyData . . . Nette Idee, geht aber nicht: Diese Treiber exportieren table_info und/oder column_info nicht. Peter Eisentraut Spaß mit PostgreSQL
  • 17. Externe Daten: Beispiel 2 Also gehen auch beliebige Daten, z. B. DBD::CSV oder DBD::AnyData . . . Nette Idee, geht aber nicht: Diese Treiber exportieren table_info und/oder column_info nicht. Peter Eisentraut Spaß mit PostgreSQL
  • 18. Externe Daten: SQL/MED “Management of External Data” Teil des SQL-Standards Implementierung geplant ab PostgreSQL 8.5 vereinheitlicht diverse bestehende Ad-Hoc-Lösungen evtl. auch Unterstützung für abenteuerliche Quellformate (Teil-)Beispiel: CREATE FOREIGN TABLE data SERVER extradb OPTIONS (tablename ’DATA123’); Peter Eisentraut Spaß mit PostgreSQL
  • 19. Web Services Beispiel Google Translate Peter Eisentraut Spaß mit PostgreSQL
  • 20. PostgreSQL und Mobiltelefone Probleme: RAM Flash-Speicher POSIX-API CPU mit Spinlocks (Geschwindigkeit?) PostgreSQL-Server auf Handy geht wohl (noch) nicht. Peter Eisentraut Spaß mit PostgreSQL
  • 21. PostgreSQL GUIs und Mobiltelefone psql nativ nicht portiert psql über ssh geht gut phpPgAdmin geht gut pgAdmin III geht (noch) nicht pgPhoneHome Peter Eisentraut Spaß mit PostgreSQL
  • 22. Externe Daten umgekehrt Wie administrieren? psql ist zu spartanisch pgAdmin ist Mist :-/ Erst wollte ich einen kioslave schreiben . . . mc ist am besten . . . aber Plugin schreiben wollte ich nicht. Peter Eisentraut Spaß mit PostgreSQL
  • 23. PostgreSQL und FUSE Peter Eisentraut Spaß mit PostgreSQL
  • 24. Zusammenfassung Mit . . . vielen Programmiersprachen, vielen Bibliotheken, vielen Datenquelllen, vielen Schnittstellen . . . ist ’ne Menge Unsinn möglich. (Aber nicht aller funktioniert.) Peter Eisentraut Spaß mit PostgreSQL