DB auf externen Medium

Der Windows Installer von EDB tut sich häufig schwer mit dem "initdb" Schritt (such mal nach der Fehlermeldung im Netz - das ist ein bekanntes Problem). Keine Ahnung warum.

Ich habe vor Jahren aufgehört den Installer zu verwenden (aus anderen Gründen allerdings), und installiere unter Windows nur über die ZIP Archive (und manuelles Starten von initdb auf der Kommandozeile)
 
Werbung:
dann lief wohl initdb nicht korrekt ab ...
Was können die Gründe dafür sein? Der Installationsort externes Medium? "Normal" auf dem PC ging es ohne Probleme.

Sollte ich es nochmal mit dem ZIP probieren?
Dann bräuchte ich aber etwas Unterstützung mit dem Command Line Befehlen... hab das hier gefunden.
Mich ärgert es etwas dass ich so viel Zeit mit solchen Dingen verbringen muss, statt weiter direkt in der DB zu arbeiten :/
 
Kann es sein, dass die ZIP Installation die Existenz irgendwelcher MS Libs voraussetzt? Oder die Existenz irgendwelcher Umgebungsvariablen?
Ich habe mir mal den Spaß gemacht, es mit einer aktuellen 13er Version von enterprisedb zu probieren. Es kommt nur Schrott raus bei den Aufrufen von initdb usw., unsinnige Hinweise zu überzähligen Parametern, eigenartig, schräg, als ob das seit 2 Jahren keiner mehr gemacht hätte. Jedenfalls bei Weitem nicht das Niveau der Fehlermeldungen, die ich aus pg sql kenne.

Meine Umgebung: ein Window7 64bit mit 3 lauffähigen "normalen" (Installer) Postgres Installationen unterschiedlichen Alters (versionen). (von daher ist selbst die Idee fehlender Libs etwas abwegig)
Oder ist es umgekehrt, eine existierende Installer Installation stört dank Umgebungsvariablen die cmd line Installation?
 
Ich habe mir mal den Spaß gemacht, es mit einer aktuellen 13er Version von enterprisedb zu probieren. Es kommt nur Schrott raus bei den Aufrufen von initdb usw., unsinnige Hinweise zu überzähligen Parametern, eigenartig, schräg, als ob das seit 2 Jahren keiner mehr gemacht hätte. Jedenfalls bei Weitem nicht das Niveau der Fehlermeldungen, die ich aus pg sql kenne.

Du kannst das gerne an EDB reporten (ja, ich bin jetzt auch bei EDB, habe damit aber nix zu tun). Wenn möglich, wirklich nachvollziehbar. Ich hab seit einer Weile den EPAS unter Linux laufen. Funktioniert, aber ja, manches ist anders als Community.
 
Kann es sein, dass die ZIP Installation die Existenz irgendwelcher MS Libs voraussetzt?
Ja, das kann sein. Die MSVC Runtime DLLs werden benötigt (der Installer installiert die automatisch mit)

als ob das seit 2 Jahren keiner mehr gemacht hätte.
Ich hab's beim Erscheinen der 13er das letzte Mal gemacht (also vor ca. 5 Monaten). Aber auf meinen Rechner ist die MSVC Runtime üblicherweise schon drauf (durch andere Entwicklungstools)
 
Du kannst das gerne an EDB reporten ..Wenn möglich, wirklich nachvollziehbar. ..
Ja, aber worauf soll ich mich da beziehen?
Download PostgreSQL Binaries | EDB
sagt
The links below allow you to download archives of the files installed by our PostgreSQL installers. These archives are provided as a convenience for expert users;
Der Ansatz, das zum Laufen zu bekommen, stammt ja aber aus 3. Quellen (Netz oder auch der verlinkte Beitrag von Castorp oben) und hat keinen Bezug zu den Binaries, die EDB bereitstellt. Die sagen ja nur, "hier habt ihr"
Natürlich könnte man annehmen, dass die Binaries entsprechend der Pg Doku ihre Parameter akzeptieren.

Und falls tatsächlich Libs fehlen, würde sich das doch eher in "beinharten" Fehlern äußern oder nicht? Ich werde mal die Umgebungsvariablen durchgehen.
 
Wie wäre es mit etwas ganz anderem?
Statt versuchen die DB mitzunehmen stelle an einem Ort Postgresql zur Verfügung und greife z.B. via VPN/SSH Tunnel von allen anderen Standorten auf den Zentralen Server zu.
Die drei Wochen, die du hier rummachst hätte man dies schon umsetzen können.
 
Wie wäre es mit etwas ganz anderem?
Statt versuchen die DB mitzunehmen stelle an einem Ort Postgresql zur Verfügung und greife z.B. via VPN/SSH Tunnel von allen anderen Standorten auf den Zentralen Server zu.
Die drei Wochen, die du hier rummachst hätte man dies schon umsetzen können.
1. Ich mache hier nicht 3 Wochen rum, jedenfalls nicht in diesem Forum. Du verwechselst mich vielleicht mit dem TE. Ich habe versucht, die Probleme des TE nachzuvollziehen. Eine einfache Installation aus einem ZIP ist ja auch ne gute Sache, sogar erstrebenswert, so ohne Adminrechte usw. (wenn sie funktioniert)
2. Ich finde es grundsätzlich immer cool, die Fragen zu beantworten, statt andere Vorschläge zu machen, die dem TE nicht weiter helfen (z.B. wegen mangelnder Internetversorgung)
 
Und zu meinen Tests:
- ich hatte Pfadangaben auf bereits installierte pg Versionen in PATH, das ist vermutlich eine nicht vorgesehene und denkbar ungünstige Startsituation. Aber nach entfernen solcher Pfadangaben geht es:

- die verschiedenen Beispiele im Internet vermischen oft die Kurzargumente und die langen ohne korrekte Schreibweise (1 Mal Minuszeichen oder 2x)
- die oft gezeigten Beispiele mit Datenverzeichnisangabe vorne, ohne Parameter -D, mit Parameter -D oder hinten mit -D funktionieren bei mir nicht, nur die pure Pfadangabe hinten (was der Darstellung initdb.exe --help entspricht)
- Beispiele ohne -W funktionieren schlecht oder vielleicht zufällig je nach anderen PG Env Settings
- das Beispiel von Castorp, das in Beitrag 17 verlinkt ist, ist -merkwürdig- gerade nicht erreichbar.
(https://www.pg-forum.de/t/postgres-sql-portable-gesucht/5414/2
Es tut uns leid…
PG-Forum.de ist aktuell nicht verfügbar. Wir aktualisieren die Seite oder führen Wartungsarbeiten durch.)
- Es sieht ein wenig so aus, dass das Thema "Process Owner" irgendwie in den Beispielen misachtet wird. Arbeite ich unter OS User Postgres oder unter einem anderen, "normalen" User usw. ...
- Es gab ein paar eigenartige Effekte, die ich aber nicht reproduzieren kann. Ich vermute, wegen ungültiger Zeichen beim Kopieren der Kommandos aus dem Netz.
 
Das heißt du hast es hinbekommen?
"Es"? Ich habe per Kommandozeile eine 13.2 postgres db unter windows 7 aus einem Archiv installiert. (Auf einem Rechner, auf dem sich bereits mehrere PG Installationen (per Installer) befinden- was die Sache etwas verrauscht)

Eigentlich schien es ja laut den Beispielen im Netz ein "2-Zeiler" zu sein. Und eine solche Installationsvariante ist ja mehr als praktisch: Keine Adminrechte benötigt, keine Binaries (Installer), die (mit Adminrechten) irgendwas auf dem System machen, einfache(re) Integrationsmöglichkeiten... Es gehört nicht zu meinem akuten Bedarf, aber ich war neugierig und habs halt ausprobiert.

initdb --help reichte im Prinzip schon

Im Normalfall verwende ich für pg schnöselige Paketinstaller unter Linux, selbst wenn es nicht die aktuelle Version ist. Der Funktionsumfang ist idR mehr als ausreichend. Windows nehme ich nur noch als Bastelsystem, privat und beruflich und weil es noch auf einem Laptop rumfliegt, der einfach nicht kaputt gehen will.

Mit deinem primären Problem der verschlüsselten DB Installation habe ich mich nicht beschäftigt. Aber wenn Du über das OS transparent ein verschlüsseltes Laufwerk bereitstellst, wenn Du dafür sorgst, dass der USB Stick immer identisch gemountet wird, sollte es gehen. Wenn es sowieso ein manueller Prozess ist, spricht ja auch nichts dagegen, das Passwort beim Start interaktiv einzugeben. Was ganz genau jetzt bei Dir hängt, hab ich nicht weiter verfolgt/verstanden.
 
Werbung:
Es ist ja nicht im Sinne des Erfinders, die Fragen aus einem Forum privat zu klären. Ich habe es nochmal durchgespielt und kopiert. Das ist mehr oder weniger ungeschönt die Abfolge der Befehle auf meinem System.
Es sind einige Zwischenschritte drin, die zur Verdeutlichung der Umgebungsparameter dienen, in meinem Fall die existierenden PG Installationen. Das habe ich durch Kürzen der Pathvariable und kontrolle der Umgebungsvariablen "ausgeblendet".

Erstelle Dir 2 Verzeichnis, packe in einem das Archiv aus, starte eine cmd shell, prüfe Deine Umgebungsvariablen und führe initdb aus...
Code:
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. Alle Rechte vorbehalten.

C:\Users\<user>>cd C:\temp\_pgsql

C:\temp\_pgsql>dir
 Volume in Laufwerk C: hat keine Bezeichnung.
 Volumeseriennummer: 8220-15FD

 Verzeichnis von C:\temp\_pgsql

24.02.2021  18:55    <DIR>          .
24.02.2021  18:55    <DIR>          ..
09.02.2021  07:27    <DIR>          bin
09.02.2021  07:27    <DIR>          doc
09.02.2021  07:27    <DIR>          include
09.02.2021  07:27    <DIR>          lib
09.02.2021  07:27    <DIR>          pgAdmin 4
17.02.2021  06:44                13 pw.txt
09.02.2021  07:27    <DIR>          share
09.02.2021  07:27    <DIR>          StackBuilder
09.02.2021  07:27    <DIR>          symbols
               1 Datei(en),             13 Bytes
              10 Verzeichnis(se), 742.090.506.240 Bytes frei

C:\temp\_pgsql>echo %path%
C:\app\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;C:\Program Files\PostgreSQL\13\bin;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;C:\Windows\system32;C:\Windows;C:\Windows\System
32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;xxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\PuTTY\;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
C:\Program Files\Git\cmd;C:\dev\TDM-GCC-64\bin;C:\Program Files\PostgreSQL\12\bin;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessC
ommon\;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;

C:\temp\_pgsql>set path=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\WiFi\bin\;C:\
Program Files\Common Files\Intel\WirelessCommon\;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\
PuTTY\;C:\Program Files\Git\cmd;C:\dev\TDM-GCC-64\bin;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;

C:\temp\_pgsql>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\<user>\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME=NB10
ComSpec=C:\Windows\system32\cmd.exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=\Users\<user>
LOCALAPPDATA=C:\Users\<user>\AppData\Local
LOGONSERVER=\\NB10
NUMBER_OF_PROCESSORS=8
OS=Windows_NT
Path=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Commo
n Files\Intel\WirelessCommon\;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\PuTTY\;C:\Program F
iles\Git\cmd;C:\dev\TDM-GCC-64\bin;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 42 Stepping 7, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=2a07
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
ProgramW6432=C:\Program Files
PROMPT=$P$G
PSModulePath=C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules
PUBLIC=C:\Users\Public
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\Windows
TEMP=C:\Users\<user>\AppData\Local\Temp
TMP=C:\Users\<user>\AppData\Local\Temp
USERDOMAIN=nb10
USERNAME=<user>
USERPROFILE=C:\Users\<user>

C:\temp\_pgsql>initdb.exe -U postgres -W -E UTF8 -A scram-sha-256 C:\temp\_pgdata
Der Befehl "initdb.exe" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

C:\temp\_pgsql>
C:\temp\_pgsql>cd bin

C:\temp\_pgsql\bin>initdb.exe -U postgres -W -E UTF8 -A scram-sha-256 C:\temp\_pgdata
Die Dateien, die zu diesem Datenbanksystem gehören, werden dem Benutzer
»<user>« gehören. Diesem Benutzer muss auch der Serverprozess gehören.

Der Datenbankcluster wird mit der Locale »German_Germany.1252« initialisiert werden.
Die Standardtextsuchekonfiguration wird auf »german« gesetzt.

Datenseitenprüfsummen sind ausgeschaltet.

Geben Sie das neue Superuser-Passwort ein:
Geben Sie es noch einmal ein:

berichtige Zugriffsrechte des bestehenden Verzeichnisses C:/temp/_pgdata ... ok
erzeuge Unterverzeichnisse ... ok
wähle Implementierung von dynamischem Shared Memory ... windows
wähle Vorgabewert für max_connections ... 100
wähle Vorgabewert für shared_buffers ... 128MB
wähle Vorgabewert für Zeitzone ... CET
erzeuge Konfigurationsdateien ... ok
führe Bootstrap-Skript aus ... ok
führe Post-Bootstrap-Initialisierung durch ... ok
synchronisiere Daten auf Festplatte ... ok

Erfolg. Sie können den Datenbankserver jetzt mit

    pg_ctl -D ^"C^:^\temp^\^_pgdata^" -l logdatei start

starten.


C:\temp\_pgsql\bin>
C:\temp\_pgsql\bin>pg_ctl -D ^"C^:^\temp^\^_pgdata^" -l logdatei start
warte auf Start des Servers.... fertig
Server gestartet

C:\temp\_pgsql\bin>psql -U postgres
psql: Fehler: konnte nicht mit dem Server verbinden: Connection refused (0x0000274D/10061)
        Läuft der Server auf dem Host »localhost« (::1) und akzeptiert er
        TCP/IP-Verbindungen auf Port 5432?
konnte nicht mit dem Server verbinden: Connection refused (0x0000274D/10061)
        Läuft der Server auf dem Host »localhost« (127.0.0.1) und akzeptiert er
        TCP/IP-Verbindungen auf Port 5432?


C:\temp\_pgsql\bin>psql -U postgres -W
Passwort:
psql (13.2)
Warnung: Konsolencodeseite (850) unterscheidet sich von der Windows-
         Codeseite (1252). 8-Bit-Zeichen funktionieren möglicherweise nicht
         richtig. Einzelheiten finden Sie auf der psql-Handbuchseite unter
         »Notes for Windows users«.
Geben Sie »help« für Hilfe ein.

postgres=# SELECT version();
                          version
------------------------------------------------------------
 PostgreSQL 13.2, compiled by Visual C++ build 1914, 64-bit
(1 Zeile)

postgres=# select setting from pg_settings where name = 'data_directory'
postgres-#  ;
     setting
-----------------
 C:/temp/_pgdata
(1 Zeile)


postgres=# create table test (id serial, value varchar(100), created date default now());
CREATE TABLE
postgres=# insert into test (value) values('erster Eintrag');
INSERT 0 1
postgres=# insert into test (value) values('2ter Eintrag');
INSERT 0 1
postgres=# select * from test;
 id |     value      |  created
----+----------------+------------
  1 | erster Eintrag | 2021-02-24
  2 | 2ter Eintrag   | 2021-02-24
(2 Zeilen)


postgres=# \q

C:\temp\_pgsql\bin>pg_ctl -D ^"C^:^\temp^\^_pgdata^" status
pg_ctl: Server läuft (PID: 5668)
C:/temp/_pgsql/bin/postgres.exe "-D" "C:/temp/_pgdata"

C:\temp\_pgsql\bin>pg_ctl -D ^"C^:^\temp^\^_pgdata^" stop
warte auf Herunterfahren des Servers.... fertig
Server angehalten

C:\temp\_pgsql\bin>dir c:\temp\_pgdata
 Volume in Laufwerk C: hat keine Bezeichnung.
 Volumeseriennummer: 8220-15FD

 Verzeichnis von c:\temp\_pgdata

24.02.2021  19:33    <DIR>          .
24.02.2021  19:33    <DIR>          ..
24.02.2021  19:04    <DIR>          base
24.02.2021  19:28    <DIR>          global
24.02.2021  19:04    <DIR>          pg_commit_ts
24.02.2021  19:04    <DIR>          pg_dynshmem
24.02.2021  19:04             4.659 pg_hba.conf
24.02.2021  19:04             1.678 pg_ident.conf
24.02.2021  19:33    <DIR>          pg_logical
24.02.2021  19:04    <DIR>          pg_multixact
24.02.2021  19:04    <DIR>          pg_notify
24.02.2021  19:04    <DIR>          pg_replslot
24.02.2021  19:04    <DIR>          pg_serial
24.02.2021  19:04    <DIR>          pg_snapshots
24.02.2021  19:33    <DIR>          pg_stat
24.02.2021  19:33    <DIR>          pg_stat_tmp
24.02.2021  19:04    <DIR>          pg_subtrans
24.02.2021  19:04    <DIR>          pg_tblspc
24.02.2021  19:04    <DIR>          pg_twophase
24.02.2021  19:04                 3 PG_VERSION
24.02.2021  19:04    <DIR>          pg_wal
24.02.2021  19:04    <DIR>          pg_xact
24.02.2021  19:04                90 postgresql.auto.conf
24.02.2021  19:04            28.800 postgresql.conf
24.02.2021  19:27                55 postmaster.opts
               6 Datei(en),         35.285 Bytes
              19 Verzeichnis(se), 741.808.566.272 Bytes frei

C:\temp\_pgsql\bin>
 
Zurück
Oben