Database Reference
In-Depth Information
postgres/add_event.sql
CREATE OR REPLACE
FUNCTION add
_
event( title
text
, starts
timestamp
,
ends
timestamp
, venue
text
, postal
varchar
(9), country
char
(2) )
RETURNS
boolean AS
$$
DECLARE
did
_
insert
boolean
:= false;
found
_
count
integer
;
the
_
venue
_
id
integer
;
BEGIN
SELECT
venue
_
id
INTO
the
_
venue
_
id
FROM
venues v
WHERE
v.postal
_
code=postal
AND
v.country
_
code=country
AND
v.name ILIKE venue
LIMIT 1;
IF
the
_
venue
_
id IS NULL
THEN
INSERT INTO
venues (name, postal
_
code, country
_
code)
VALUES
(venue, postal, country)
RETURNING venue
_
id
INTO
the
_
venue
_
id;
did
_
insert := true;
END IF
;
-- Hinweis: kein „Fehler“ wie bei einigen Programmiersprachen
RAISE NOTICE
'Venue found %'
, the
_
venue
_
id;
INSERT INTO
events (title, starts, ends, venue
_
id)
VALUES
(title, starts, ends, the
_
venue
_
id);
RETURN did
_
insert;
END
;
$$ LANGUAGE plpgsql;
Sie können diese externe Datei in das aktuelle Schema mit der folgenden
Kommandozeile einfügen (wenn Sie nicht den ganzen Code abtippen wollen):
book=# \
i add
_
event.sql
Wenn Sie ihn ausführen, sollte er
t
(true, also wahr) zurückgeben, da der
Veranstaltungsort
Run's House
neu ist. Das ersetzt das Senden zweier SQL-
Befehle (ein select gefolgt von einem insert) vom Client durch einen.
SELECT
add
_
event(
'House Party'
,
'2012-05-03 23:00'
,
'2012-05-04 02:00'
,
'Run''s House'
,
'97205'
,
'us'
);
Die Sprache, in der wir die Prozedur entwickelt haben, ist PL/pgSQL (was
für Procedural Language/PostgreSQL steht). Die Details einer ganzen Pro-
grammiersprache abzuhandeln, würde unseren Rahmen sprengen, aber Sie
können alles darüber in der PostgreSQL-Onlinedokumentation nachlesen.
3
Neben PL/pgSQL unterstützt Postgres drei weitere Kernsprachen für die Ent-
wicklung von Prozeduren: Tcl, Perl und Python. Für dutzende anderer Spra-