PostgreSQL Flexible Installation

Hallo,
als Neuling im PG Umfeld und Oracle DBA suche ich nach folgender Möglichkeit.
Man kann PG sehr einfach per yum, rpm, usw. unter Linux installieren.

Ich bin auf der Suche nach einer Vorgehensweise um flexibel auf einem Server mehrere Versionen mit mehreren Datenbanken
individuell aufzusetzen.

Als Beispiel:
Linux Ich möchte möglichst mit einem postgres User unter Linux arbeiten u. nicht pro Version einen Linux User

PG Software /opt/pg/v10 Version 10
/opt/pg/v11 Version 11

Datenbanken /u01/data/db1
/u01/data/db2

Kann man den PG Server in verschiedenen Versionen downloaden und installieren z.B. als tar-ball
oder geht das nur über download source, make all, install etc.

Kann mir jemand ein paar Tipps geben, oder Links zu entsprechenden Dokumenten

Wie setzt man einen solchen Server richtig auf. Eventuell ist das ja alles bereits vorhanden …

Vorab Danke

Das hängt stark von Deiner Distribution ab, aber soweit ich weiß unterstützen alle die parallele Installation verschiedener Versionen.

Unter CentOS mache ich das so:

yum install postgresql11
yum install postgresql12

Eventuelle musst Du den port in postgresql.conf manuell anpassen. Aber das war’s dann auch schon.

Wie kann ich denn die Datafiles individuell konfigurieren ?

(Also die Tablespaces auf verschiedene Disks I/O verlagern)

Geht das über die PGDATA Variable. Wenn “Ja” gibt es ein Beispiel für ein gutes Login Profile

‘show’ ist psql-spezifisch, also spezifisch für dem Kommandozeilenclient von PostgreSQL. Eine allgemeiner funktionierende Lösung ist:

select setting from pg_settings where name = 'data_directory';

das nur der Vollständigkeit halber :wink:

Nein, das ist ein ganz normaler SQL Befehl: https://www.postgresql.org/docs/current/sql-show.html

argh, hast Recht :wink:

Hallo!
Du musst natürlich darauch achten, dass die verschiedenen Versionen verschiedene Datadirs nutzen. Je nach Distributrion kannst du das z.B. in den Service-Files von systemd machen. Entweder direkt oder du richtest jeweils Variablen dafür ein.
Tablespaces kannst du die selben verwenden, wenn ich das richtig beobachtet habe. Die verschiedenen Versionen legen sich ihre Struktur dann dort selbst in verschiedenen Unterverzeichnissen an. Probier das einfach aus. Natürlich müssen sie groß genug sein. Jede Datenbank hat einen Default-Tablespace, der auf ihr Datenverzeichnis weist, wiederum Distri-abhängig.
Die Antwort auf die Frage, ob man Tablespaces braucht ist jein. Zuerst braucht du viele Daten, große Indices und viel Log-Traffic, dass sich das lohnt. Dazu entsprechend viele Platten/Raids damit z.B. Indizes, Logs und Daten getrennt werden können. Wenn alles sowieso auf eine Spindel geht, ist das eher unsinnig.

Viel Grüße
Uwe

Hallo zusammen,
Danke für die Antworten …

Warum Tablespaces? Nun es werden mehrere Schemata benötigt die jeweils 300-500GB groß sind.
Wir möchten von Anfang an eine Verteilung der Daten und I/O Last vornehmen.

Wir sind aber am Anfang u. beginnen mit Design, Konzept für Migration usw. daher auch die Frage nach der flexiblen Installation

Gruß

solange alles auf einer Platte ist (du also nur eine Platte hast), machen tablespaces in PostgreSQL keinen Sinn.

Tablespaces unter Postgres sind etwas komplett anderes als unter Oracle. Postgres verwendet für jede Tabelle eine eigene Datei (bzw. mehrere), und ein Tablespace ist letztendlich “nur” ein Verzeichnis im Dateisystem in dem diese Dateien abgelegt werden.

Da wird nicht alles in einer einzelnen Datei (=Tablespace) gespeichert wie in einem Oracle Tablespace.

Unter Oracle macht es Sinn jedem User (=Schema) in einen eigenen Tablespace zu legen, weil es sonst später so unglaublich aufwändig ist, Plattenplatz wieder freizugeben. Wenn Du in Postgres ein DROP SCHEMA CASCADE (oder auch nur ein DROP TABLE) machst, ist der Platz auf der Platte danach sofort wieder frei - egal ob Du Tablespaces verwendest oder nicht. Du solltest auch daran denken, dass (im Gegensatz zu Oracle) ein “User” und ein “Schema” in Postgres zwei verschiedene Dinge sind.

Wenn später wirklich die Verwendung von Tablespaces benötigt wird (was ich für eher unwahrscheinlich halte), dann kann man problemlos die Tabellen verschieben.

Nur weil das Konzept (“Tablespace”) genauso heißt wie bei Oracle, bedeutet das nicht, dass man es genauso einsetzen sollte.

Ja, habe ich verstanden. Es kommt hier ein größerer DB Server mit separatem Storage System zu Einsatz …

was du machen kannst und was auch was bringt, bei schreibintensiven sachen: das transaction-log auf eine komplett separate disk legen, und zwar auf eine schnelle.

Und wenn ihr es richtig machen wollt: bucht unseren Support :wink:

wir lernen jeden Tag dazu :slight_smile: Vielen Dank fürs Angebot …

wohin kann ich das Angebot schicken? :wink:

netter Versuch :wink: