Download - Spaß mit PostgreSQL
![Page 1: Spaß mit PostgreSQL](https://reader034.vdocuments.net/reader034/viewer/2022052410/54826bf6b4af9f690d8b4786/html5/thumbnails/1.jpg)
Spaß mit PostgreSQL
Peter Eisentraut
Chemnitzer Linux-Tage 2009
Peter Eisentraut Spaß mit PostgreSQL
![Page 2: Spaß mit PostgreSQL](https://reader034.vdocuments.net/reader034/viewer/2022052410/54826bf6b4af9f690d8b4786/html5/thumbnails/2.jpg)
Der Anfang allen Übels . . .
Procedural Languages:beliebige Programmiersprachen im PostgreSQL-Serverausführen
Perl, Python, Tcl, Ruby, Java, etc.
für AnwendungslogikAnbindung an externe Bibliotheken
Peter Eisentraut Spaß mit PostgreSQL
![Page 3: Spaß mit PostgreSQL](https://reader034.vdocuments.net/reader034/viewer/2022052410/54826bf6b4af9f690d8b4786/html5/thumbnails/3.jpg)
Procedural Languages: Beispiel
CREATE OR REPLACE FUNCTION email_name(email text)RETURNS textLANGUAGE plperluAS $$use Email::Address;
my @addresses = Email::Address->parse($_[0]);return undef unless scalar(@addresses) > 0;return $addresses[0]->name;$$;
Peter Eisentraut Spaß mit PostgreSQL
![Page 4: Spaß mit PostgreSQL](https://reader034.vdocuments.net/reader034/viewer/2022052410/54826bf6b4af9f690d8b4786/html5/thumbnails/4.jpg)
Beispiel PL/sh
Code mit beliebigen Shells:
CREATE FUNCTION email(addr text, subj text,body text)
RETURNS voidLANGUAGE plshAS $$#!/bin/shecho "$3" | mail -s "$2" "$1"$$;
Peter Eisentraut Spaß mit PostgreSQL
![Page 5: Spaß mit PostgreSQL](https://reader034.vdocuments.net/reader034/viewer/2022052410/54826bf6b4af9f690d8b4786/html5/thumbnails/5.jpg)
PL(/sh) Interna
Quelltext kann beliebig verarbeitet werden, mit Bibliothek,Interpreter o. ä.PL/sh kopiert Quelltext in temporäre DateiInterpreter wird anhand #! ausgesuchtArgument sind in $1, . . .Eingeschränkte Flexibilität bei Triggern
Peter Eisentraut Spaß mit PostgreSQL
![Page 6: Spaß mit PostgreSQL](https://reader034.vdocuments.net/reader034/viewer/2022052410/54826bf6b4af9f690d8b4786/html5/thumbnails/6.jpg)
PL/sh Demo
Benachrichtigungen über Updates senden
Peter Eisentraut Spaß mit PostgreSQL
![Page 7: Spaß mit PostgreSQL](https://reader034.vdocuments.net/reader034/viewer/2022052410/54826bf6b4af9f690d8b4786/html5/thumbnails/7.jpg)
PL Demo mit GUI
PL/Perl ist flexibiler bei der Bearbeitung von Triggern
Peter Eisentraut Spaß mit PostgreSQL
![Page 8: Spaß mit PostgreSQL](https://reader034.vdocuments.net/reader034/viewer/2022052410/54826bf6b4af9f690d8b4786/html5/thumbnails/8.jpg)
PL/LOLCODE
create or replace function lol_pi() returns float immutablelanguage pllolcode as $$HAI
I HAS A PIADD ITZ 0.0I HAS A PISUB ITZ 0.0I HAS A ITR ITZ 0I HAS A ITRZ ITZ 20000I HAS A T1I HAS A T2
IM IN YR LOOPT1 R QUOSHUNT OF 4.0 AN SUM OF 3.0 AN ITRT2 R QUOSHUNT OF 4.0 AN SUM OF 5.0 AN ITRPISUB R SUM OF PISUB AN T1PIADD R SUM OF PIADD AN T2ITR R SUM OF ITR AN 4.0BOTH SAEM ITR AN BIGGR OF ITR AN ITRZ, O RLY?
YA RLY, GTFOOIC
IM OUTTA YR LOOPFOUND YR SUM OF 4.0 AN DIFF OF PIADD AN PISUB
KTHXBYE$$;
Peter Eisentraut Spaß mit PostgreSQL
![Page 9: Spaß mit PostgreSQL](https://reader034.vdocuments.net/reader034/viewer/2022052410/54826bf6b4af9f690d8b4786/html5/thumbnails/9.jpg)
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
![Page 10: Spaß mit PostgreSQL](https://reader034.vdocuments.net/reader034/viewer/2022052410/54826bf6b4af9f690d8b4786/html5/thumbnails/10.jpg)
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 ALLSELECT IX, IY, CX, CY, X * X - Y * Y + CX AS X, Y * X * 2 + CY, I + 1
FROM ZWHERE 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 ZTGROUP BY IYORDER BY IY;
Peter Eisentraut Spaß mit PostgreSQL
![Page 11: Spaß mit PostgreSQL](https://reader034.vdocuments.net/reader034/viewer/2022052410/54826bf6b4af9f690d8b4786/html5/thumbnails/11.jpg)
Rekursive Anfragen: Wie funktioniert’s?
1 Nicht-rekursiven Teil ausführen, in Ergebnistabelle undArbeitstabelle speichern
2 Wenn Arbeitstabelle nicht leer, dann . . .3 Rekursiven Teil ausführen, mit Arbeitstabelle anstelle
Platzhalter, an Ergebnistabelle anhängen und inZwischentabelle speichern
4 Zwischentabelle in Arbeitstabelle übertragen5 wiederholen
Peter Eisentraut Spaß mit PostgreSQL
![Page 12: Spaß mit PostgreSQL](https://reader034.vdocuments.net/reader034/viewer/2022052410/54826bf6b4af9f690d8b4786/html5/thumbnails/12.jpg)
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 ALLSELECT t.ganzes, t.teil, t.menge * et.mengeFROM enthaltene_teile et, teile tWHERE t.ganzes = et.teil
)SELECT teil, SUM(menge) AS gesamtmengeFROM enthaltene_teileGROUP BY teil;
Peter Eisentraut Spaß mit PostgreSQL
![Page 13: Spaß mit PostgreSQL](https://reader034.vdocuments.net/reader034/viewer/2022052410/54826bf6b4af9f690d8b4786/html5/thumbnails/13.jpg)
Rekursive Anfragen: Beispiel 3
Peter Eisentraut Spaß mit PostgreSQL
![Page 14: Spaß mit PostgreSQL](https://reader034.vdocuments.net/reader034/viewer/2022052410/54826bf6b4af9f690d8b4786/html5/thumbnails/14.jpg)
Einbindung externer Daten
andere PostgreSQL-Systeme abfragenandere DBMS-Typen abfragenNicht-SQL-Daten lesen (CSV, XML)
Peter Eisentraut Spaß mit PostgreSQL
![Page 15: Spaß mit PostgreSQL](https://reader034.vdocuments.net/reader034/viewer/2022052410/54826bf6b4af9f690d8b4786/html5/thumbnails/15.jpg)
Externe Daten: Beispiel
DBI-Link: externe DBI-kompatible Datenquellen alsPostgreSQL-Tabellen darstellenz.B. MySQL über PostgreSQL
Peter Eisentraut Spaß mit PostgreSQL
![Page 16: Spaß mit PostgreSQL](https://reader034.vdocuments.net/reader034/viewer/2022052410/54826bf6b4af9f690d8b4786/html5/thumbnails/16.jpg)
Externe Daten: Beispiel 2
Also gehen auch beliebige Daten, z. B. DBD::CSV oderDBD::AnyData . . .Nette Idee, geht aber nicht: Diese Treiber exportierentable_info und/oder column_info nicht.
Peter Eisentraut Spaß mit PostgreSQL
![Page 17: Spaß mit PostgreSQL](https://reader034.vdocuments.net/reader034/viewer/2022052410/54826bf6b4af9f690d8b4786/html5/thumbnails/17.jpg)
Externe Daten: Beispiel 2
Also gehen auch beliebige Daten, z. B. DBD::CSV oderDBD::AnyData . . .Nette Idee, geht aber nicht: Diese Treiber exportierentable_info und/oder column_info nicht.
Peter Eisentraut Spaß mit PostgreSQL
![Page 18: Spaß mit PostgreSQL](https://reader034.vdocuments.net/reader034/viewer/2022052410/54826bf6b4af9f690d8b4786/html5/thumbnails/18.jpg)
Externe Daten: SQL/MED
“Management of External Data”Teil des SQL-StandardsImplementierung geplant ab PostgreSQL 8.5vereinheitlicht diverse bestehende Ad-Hoc-Lösungenevtl. auch Unterstützung für abenteuerliche Quellformate
(Teil-)Beispiel:
CREATE FOREIGN TABLE dataSERVER extradbOPTIONS (tablename ’DATA123’);
Peter Eisentraut Spaß mit PostgreSQL
![Page 19: Spaß mit PostgreSQL](https://reader034.vdocuments.net/reader034/viewer/2022052410/54826bf6b4af9f690d8b4786/html5/thumbnails/19.jpg)
Web Services
Beispiel Google Translate
Peter Eisentraut Spaß mit PostgreSQL
![Page 20: Spaß mit PostgreSQL](https://reader034.vdocuments.net/reader034/viewer/2022052410/54826bf6b4af9f690d8b4786/html5/thumbnails/20.jpg)
PostgreSQL und Mobiltelefone
Probleme:RAMFlash-SpeicherPOSIX-APICPU mit Spinlocks(Geschwindigkeit?)
PostgreSQL-Server auf Handy geht wohl (noch) nicht.
Peter Eisentraut Spaß mit PostgreSQL
![Page 21: Spaß mit PostgreSQL](https://reader034.vdocuments.net/reader034/viewer/2022052410/54826bf6b4af9f690d8b4786/html5/thumbnails/21.jpg)
PostgreSQL GUIs und Mobiltelefone
psql nativ nicht portiertpsql über ssh geht gutphpPgAdmin geht gutpgAdmin III geht (noch) nichtpgPhoneHome
Peter Eisentraut Spaß mit PostgreSQL
![Page 22: Spaß mit PostgreSQL](https://reader034.vdocuments.net/reader034/viewer/2022052410/54826bf6b4af9f690d8b4786/html5/thumbnails/22.jpg)
Externe Daten umgekehrt
Wie administrieren?psql ist zu spartanischpgAdmin ist Mist :-/Erst wollte ich einen kioslave schreiben . . .mc ist am besten. . . aber Plugin schreiben wollte ich nicht.
Peter Eisentraut Spaß mit PostgreSQL
![Page 23: Spaß mit PostgreSQL](https://reader034.vdocuments.net/reader034/viewer/2022052410/54826bf6b4af9f690d8b4786/html5/thumbnails/23.jpg)
PostgreSQL und FUSE
Peter Eisentraut Spaß mit PostgreSQL
![Page 24: Spaß mit PostgreSQL](https://reader034.vdocuments.net/reader034/viewer/2022052410/54826bf6b4af9f690d8b4786/html5/thumbnails/24.jpg)
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