Mittwoch, September 11, 2013

Postgres Marginalien

Zwei Kleinigkeiten, denen ich bei meiner Arbeit mit postgres begegnet bin:

Mit dem Nummerngenerator generate_series lassen sich sehr komfortabel Testdaten erzeugen:

-- aufsteigend in einer Schritten
test_import=# select * from generate_series(1,10);
 generate_series
-----------------
               1
               2
               3
               4
               5
               6
               7
               8
               9
              10
(10 Zeilen)

-- absteigend in zweier Schritten
test_import=# select * from generate_series(10,0,-2);
 generate_series
-----------------
              10
               8
               6
               4
               2
               0
(6 Zeilen)

Das scheint mir doch etwas komfortabler zu sein, als meine übliche connect-by-dual-Methode für Oracle, obwohl ich auch mit der sehr zufrieden bin.

Auch nett sind temporary sequences  die ich dieser Tage an Stelle einer Variablen in einem Script verwendet habe. Für temporary sequences gilt:
If specified, the sequence object is created only for this session, and is automatically dropped on session exit. Existing permanent sequences with the same name are not visible (in this session) while the temporary sequence exists, unless they are referenced with schema-qualified names.
Normalerweise hätte ich das als eher seltsames Feature angesehen, aber vorgestern brauchte ich einfach ein paar Ids, die ich bei der initialen Füllung von Tabellen verwenden wollte - eine permanente Sequence schien mir etwas übertrieben, aber das temporäre Objekt passte in diesem Fall erstaunlich gut. Hier noch ein kleiner Test, der zeigt, dass die Sequenz angelegt und im Dictionary registriert wird, aber nach dem Ende der Session verschwindet.

test_import=# create temporary sequence test_seq;
CREATE SEQUENCE
test_import=# select * FROM pg_class c WHERE c.relkind = 'S';
 relname  | relnamespace | reltype | reloftype | relowner | relam |
----------+--------------+---------+-----------+----------+-------+
 test_seq |        33778 |   33781 |         0 |       10 |     0 |
(1 Zeile)

test_import=# \q
--> Neuanmeldung

postgres=# select * FROM pg_class c WHERE c.relkind = 'S';
 relname | relnamespace | reltype | reloftype | relowner | relam |
---------+--------------+---------+-----------+----------+-------+
(0 Zeilen)

Übrigens gefällt mir psql als Kommandozeilen-Tool ziemlich gut - man merkt, dass sich da jemand in Sachen Dokumentation und Bedienbarkeit einige Mühe gegeben hat.

Keine Kommentare:

Kommentar veröffentlichen