Die Lösung muss dabei folgende Rahmenbedingungen einhalten:
1. Das Projekt ist eine in PHP5 geschriebene, webgestützte Applikation.
2. Es gibt für jede DB Schnittstelle eine eigene Klasse, die sich gegenüber dem Projekt identisch verhält. Es hängt also grundsätzlich nur von der Klasse ab die man zu Beginn einbindet welcher DB-Typ (mysql, mysqli,postgres) verwendet wird.
3. Die Kommunikation zwischen dem Projekt und der Datenbank erfolgt ausschliesslich über SQL.
4. Die Einrichtung (Installation -> Datenbank, Tabellen, User) muss ebenfalls ausschliesslich über SQL erfolgen (Webinstaller).
5. Das Projekt wird international eingesetzt -> Mehrsprachigkeit mit UTF8.
6. Die Lösung für MySQL/Postgres sollten sich nicht zu stark unterscheiden, also möglichst kompatible SQL Statements.
Aktuell ist der webgestützte Installer schon recht weit, ich bin aber mit Postgres noch zuwenig vertraut um abzuschätzen ob das was bereits funktioniert auch sinnvoll eingerichtet ist

Folgende Schritte erfolgen:
1. Verbindung zur postgres DB aufbauen als Adminuser
2. Datenbank erstellen:
CREATE DATABASE meine_DB WITH ENCODING='UTF8';
3. Verbindung erneut aufbauen zu meine_DB als Adminuser
4. Postgres SQL Datei öffnen und alle SQL Befehle darin Schritt für Schritt abarbeiten (erstellen der Struktur):
SET NAMES 'utf8';
CREATE TYPE bin_enum AS ENUM ('0','1');
CREATE TABLE IF NOT EXISTS "tbl_first" (
"id" SERIAL,
"name" VARCHAR(255) NOT NULL,
"description" VARCHAR(255) NOT NULL,
"users" SMALLINT NOT NULL DEFAULT '0',
"active" bin_enum NOT NULL DEFAULT '1',
"last_modified" TIMESTAMP NOT NULL,
UNIQUE ("groupname"),
PRIMARY KEY ("id")
) ;
[...] (weitere 100 Tabellen)
5. User erstellen:
CREATE USER mein_user WITH PASSWORD 'mein_password';
6. User berechtigen:
GRANT ALL ON DATABASE meine_DB TO mein_user;
7. Berechtigung für alle Tabellen:
SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';
...dann für jeden Eintrag dieser Abfrage:
GRANT SELECT, UPDATE, INSERT, DELETE ON \"".$elem['table_name']."\" TO mein_user;
8. Berechtigung für alle Sequenzen:
SELECT sequence_name FROM information_schema.sequences;
...dann für jeden Eintrag dieser Abfrage:
GRANT SELECT, UPDATE ON \"".$elem['sequence_name']."\" TO mein_user;
9. Verbindung erneut aufbauen zu meine_DB als mein_user
10. Daten in die DB abfüllen
Grundsätzlich klappt das, aber ich bin mir nicht sicher was folgende Dinge betrifft:
- Braucht der Benutzer die DB Rechte von Punkt 6 - bei MySQL hat er nur Rechte entsprechend Punkt 7 auf die DB-Tabellen
- Einzelne Datenfelder und Tabellennamen müssen in Anführungszeichen geschrieben werden - hier scheint Postgres nur " zu akzeptieren - bei MySQL war es `.
Wenn ich mit phpPgAdmin die DB danach anschaue ist die DB unter dem Schema "Public". Ist das richtig?
Gibt es andere Tipps, was man besser machen könnte?
Vielen Dank

Martin
