PostgreSQL#

Grundfunktionen#

ACID-konform

ACID (A tomicity, C onsistency, I solation, D urability) ist eine Reihe von Eigenschaften, die Datenbanktransaktionen erfüllen sollten um auch im Störungsfall weiterhin die Gültigkeit der Daten gewährleisten zu können.

SQL:2011

Mit temporal_tables wird auch der SQL-Standard ISO/IEC 9075:2011 erfüllt, u.a. durch:

  • Time Period definitions

  • Valid time tables

  • Transaction time tables (system-versioned tables) with time-sliced and sequenced queries

Datentypen

Folgende Datentypen werden out of the box unterstützt:

  • primitiven Datentypen: Integer, Numeric, String, Boolean

  • Strukturierte Datentypen: Date/Time, Array, Range, UUID

  • Dokumenttypen: JSON/JSONB, XML, Key-value (Hstore)

  • Geometrische Datentypen: Point, Line, Circle, Polygon

  • Anpassungen: Composite, Custom Types

Transactional Data Definition Language (DDL)

Transactional DDL wird via Write-Ahead Logging realisiert. Dabei sind auch große Änderungen möglich, nicht jedoch add und drop von Datenbanken und Tabellen:

$ psql mydb
mydb=# DROP TABLE IF EXISTS foo;
NOTICE: table "foo" does not exist
DROP TABLE
mydb=# BEGIN;
BEGIN
mydb=# CREATE TABLE foo (bar int);
CREATE TABLE
mydb=# INSERT INTO foo VALUES (1);
INSERT 0 1
mydb=# ROLLBACK;
ROLLBACK
mydb=# SELECT * FROM foo;
ERROR: relation "foo" does not exist
Concurrent Index

PostgreSQL kann Indizes erstellen ohne Schreibzugriffe auf Tabellen sperren zu müssen.

Erweiterungen

PostgreSQL kann einfach erweitert werden. Das mit dem Quellcode gelieferte contrib/-Verzeichnis enthält verschiedene Erweiterungen, die in Appendix F beschrieben sind. Andere Erweiterungen sind unabhängig entwickelt worden, wie z.B. PostGIS oder Slony-I.

Common Table Expression

WITH Queries (Common Table Expressions) unterteilt komplexe Anfragen in einfachere Anfragen, z.B.:

WITH regional_insolation AS (
    SELECT region, SUM(amount) AS total_insolation
    FROM orders
    GROUP BY region
), top_regions AS (
    SELECT region
    FROM regional_insolation
    WHERE total_insolation > (SELECT SUM(total_insolation)/10 FROM regional_insolation)
)

Zudem gibt es auch noch einen RECURSIVE-Modifier, der die WITH-Abfrage auf seine eigene Ausgabe verweist. Im folgenden ein Beispiel zum Summieren der Zahlen von 1 bis 100:

WITH RECURSIVE t (n) AS (
    WERTE (1)
  UNION ALL
    SELECT n + 1 FROM t WO <100
)
SELECT sum (n) FROM t;
Multi-Version Concurrency Control (MVCC)

Multi-Version Concurrency Control erlaubt, dass zwei oder mehr Sessions gleicheitig auf dieselben Daten zugreifen ohne dabei die Integrität der Daten zu gefährden.

Cross Platform

PostgreSQL läuft auf gängigen CPU-Architekturen wie x86, PowerPC, Sparc, ARM, MIPS oder PA-RISC. Auch die meisten Betriebssysteme werden unterstützt: Linux, Windows, FreeBSD, OpenBSD, NetBSD, Mac OS, AIX, HP/UX und Solaris.

Siehe auch

explain.depesz.com

Web-App, die PostgreSQLs EXPLAIN- und ANALYZE -Anweisungen visualisiert.