ich lasse über den WindowsScriptingHost einen pg_dumpall mit der Option -v ausführen. Die Standardfehlerausgabe ist aber bis zur vollständigen Erstelung des Dumps leer. Ich lasse sie aller 2 Sekunden auslesen.
Ich das normal, oder muss ich noch etwas anschalten um die Daten in Echtzeit zu bekommen.
Die Meldungen werden von pg_dump und pg_dumpall sofort ausgegeben.
Keine Ahnung, was das Framework, was du da verwendest, damit anstellt. Bist du dir sicher, dass überhaupt die Meldungen dort ankommen, wo du sie hinhaben willst?
In kurz: das was Du als $SHELL kennst. Natürlich nicht nach dem KISS - Prinzip (Keep it small and simple) a la *NIX, sondern mit dem üblichen Kleinweich-Gedöhns.
Zur Frage: vermutlich puffert WSH die Ausgabe irgendwo zwischen. Vielleicht in Redmond …
Vielen Dank für die kompetenten Antworten. Leider komme ich mit Shell in VB nicht an die Rückgabewerte, das war mein erster Versuch. Über den WindowsScriptingHost komme ich ran.
Ich brauche es nur um dem Benutzer während der Datensicherung einen Fortschritt zu zeigen, leider dauert er ja doch eine Weile…
PS: Oder kennt jemand eine funktionierende Lösung für VB
Wieso soll dich nun jemand privat kontaktieren, wieso kannst du die Lösung nicht einfach hier posten und der nächste mit dem Problem findet die Lösung sofort?
Wieso soll dich nun jemand privat kontaktieren, wieso kannst du die Lösung nicht einfach hier posten und der nächste mit dem Problem findet die Lösung sofort?
Weil mir nach solchen Antworten nicht sicher bin ob das gewünscht ist
In kurz: das was Du als $SHELL kennst. Natürlich nicht nach dem KISS - Prinzip (Keep it small and simple) a la *NIX, sondern mit dem üblichen Kleinweich-Gedöhns.
Aber ich mal nicht so… Habe zu lange nach einer Lösung gesucht.
Public Sub MakeSQLBackup(ByVal sBackupFile As String)
Dim ShellWSH As wshShell
Dim EnvWSH As Object
Dim ExecWSH As WshExec
Dim Output As String
'Aufruf zusammenbasteln
Eingabe = Eingabe & "C:\Programme\PostgreSQL\8.4\bin\pg_dumpall.exe "
Eingabe = Eingabe & "--host Servername "
Eingabe = Eingabe & "--port Port "
Eingabe = Eingabe & "--username Postgres "
Eingabe = Eingabe & "--verbose " ' Mit dieser Option wird pg_dumpall diverse Fortschrittsmeldungen auf die Standardfehlerausgabe schreiben.
Eingabe = Eingabe & "--inserts " 'Sichere die Daten als INSERT-Befehle (anstatt COPY). Das macht die Wiederherstellung sehr langsam, aber es macht die Archive besser auf andere SQL-Datenbankprodukte portierbar.
'Eingabe = Eingabe & "--column-inserts " 'Sichere die Daten als INSERT-Befehle mit ausdrücklichen Spaltennamen (INSERT INTO tabelle (spalte, ...) VALUES ...). Das macht die Wiederherstellung sehr langsam, aber es ist notwendig, wenn Sie die Spaltenreihenfolge verändern wollen.
Eingabe = Eingabe & "--clean " 'Gib SQL-Befehle aus, um die Datenbanken zu entfernen bevor Sie erzeugt werden.
Eingabe = Eingabe & "--file """ & sBackupFile & """ "
Set ShellWSH = CreateObject("Wscript.shell")
Set EnvWSH = ShellWSH.Environment("PROCESS")
EnvWSH("PGPASSWORD") = "geheim"
Set ExecWSH = ShellWSH.Exec(Eingabe)
Do Until ExecWSH.StdErr.AtEndOfStream
Output = ExecWSH.StdErr.Line & " " & ExecWSH.StdErr.ReadLine
Debug.Print Output
DoEvents
Loop
Debug.Print ExecWSH.StdErr.Line
End Sub