Seite wählen

Postgresql: Neues vom Elefant

von | Mai 10, 2012 | PostgreSQL, Development

Postgresql bereichert die Welt von OpenSource Datenbanken schon seit langem, führte allerdings bisher eher ein Schattendasein und überließ MySQL das Feld – Allerdings völlig zu unrecht. Postgresql orientiert sich mehr am SQL Standard und fördert deutlich stärker die Kompatibilität mit anderen Systemen. Das ganze System fühlt sich auch mehr nach „echter“ Datenbank an, z.B. durch Namespaces, Sequenzen, Partitionierung oder die interne Verwaltung. Durch stärkere Kontrolle der Datenhaltung gewinnt man viel Performance und Transparenz bei der Entwicklung von Software oder den Betrieb von Plattformen auf Basis von Postgresql. Mir haben ein paar Sachen besonders gut gefallen die ich gerne Vorstellen würden:

Table Inheritance

Postgresql unterstützt Vererbungen. Damit ist es Möglich Objektrelationen aus der Softwareentwicklung auf die Datenbank zu übertragen ohne sich verbiegen zu müssen. Die Vererbung kann auch zur Partitionierung benutzt werden da die Attributwerte des ganzen Datensatz in den jeweiligen Tabellen landen.

create sequence universal_seq;
CREATE TABLE Base(
  oid INT8 PRIMARY KEY DEFAULT nextval('universal_seq'),
  name varchar(100) NOT NULL CHECK (name <> '')
);
CREATE TABLE asset(
  vendor VARCHAR(100),
  assetid uuid NOT NULL DEFAULT uuid_generate_v4()
) inherits (base);
create table server(
  description varchar(255),
  ipaddress cidr
) inherits(asset);

Arrays

Will man ein paar Werte in einem Feld abspeichern und nicht gleich eine abhängige Relation durch Fremdschlüssel anlegen eigenen sich simple Arrays. Die Arrays werden in der Datenbank als native Datentypen behandelt.

create table rezepte(
  id SERIAL,
  titel varchar(100),
  tags VARCHAR(100)[]
);
insert into rezepte(titel, tags) VALUES('Spinatauflauf', '{"spinat", "vegetarisch", "feta"}');
insert into rezepte(titel, tags) VALUES('Spaghetti bolognese', '{"tomaten", "hackfleisch"}');
insert into rezepte(titel, tags) VALUES('Spanakopita', '{"spinat", "vegetarisch", "feta"}');
insert into rezepte(titel, tags) VALUES('Gyros', '{"tzatziki", "knoblauch"}');
select * from rezepte WHERE 'spinat'=ANY(tags);

HSTORES

Hier prallen eigentlich zwei Welten aufeinander: Relationale Datenbanken und NOSQL. HSTORES ist ein Datentyp welcher ein Dictionary enthält. Interessant ist auch hier das es sich um einen ‚internen‘ Typ handelt der speziell indiziert werden kann.

create table attributes(uid SERIAL, dict HSTORE);
create table attributes(uid SERIAL, dict HSTORE);
insert into attributes(dict) VALUES('"f"=>"Eduart", "l"=>"Zimmermann"');
CREATE INDEX attr_dict_lastname
ON attributes
((attributes.dict -> 'l'));
select dict -> 'f' as firstname from attributes where dict -> 'l' = 'Zimmermann';

Zugegeben, es ist nicht wirklich alles neu aber es lohnt sich ein Blick über den See. Wer ungebunden ist und die Möglichkeit besitzt sich auf ein System festzulegen, kriegt mit Postgresql gleich eine komplette Fabrik zum Werkzeugkasten hinzu.

Marius Hein
Marius Hein
Head of IT Service Management

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert und viele Jahre in der Softwareentwicklung gearbeitet. Mittlerweile ist er Herr über die interne IT und als Leiter von ITSM zuständig für die technische Schnittmenge der Abteilungen der NETWAYS Gruppe. Wenn er nicht gerade IPv6 IPSec Tunnel bohrt, sitzt er daheim am Schlagzeug und treibt seine Nachbarn in den Wahnsinn.

0 Kommentare

Trackbacks/Pingbacks

  1. Weekly Snap: Hardware deals & OSMC CfP to Pangolin & PostgreSQL › NETWAYS Blog - [...] Stefan followed with his hyperthreading workaround for slow performance in Ubuntu LTS 12.04 “Precise Pangolin”, while Marius put his…

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Mehr Beiträge zum Thema PostgreSQL | Development

Mein PHP-Trainingsprojekt

PHP Schulung Vor kurzem haben wir begonnen, eine neue Programmiersprache zu lernen – PHP. In der ersten Woche haben wir mit den Grundlagen wie Variablen, Arrays, Schleifen begonnen und uns schrittweise zu komplizierterer Syntax wie Funktionen, Objekten und Klassen...

check_prometheus ist jetzt öffentlich verfügbar!

Monitoring ist komplex, das wissen wir hier bei NETWAYS leider zu gut. Deswegen laufen in der Infrastruktur auch mal gerne mehrere Tools für die Überwachung. Zwei gern gesehene Kandidaten sind dabei Icinga und Prometheus. Icinga und Prometheus erfüllen...