Anzeige:
Ergebnis 1 bis 6 von 6

Thema: PQexec (dbhandle, "vacuumdb"); funktioniert nicht

  1. #1
    Registrierter Benutzer
    Registriert seit
    23.03.2001
    Beiträge
    650

    Unhappy PQexec (dbhandle, "vacuumdb"); funktioniert nicht

    Mit diesem Programm

    Code:
    #include <stdio.h>
    #include "/usr/include/pgsql/libpq-fe.h"
    
    int
    main (int argc, char **argv)
    {
      PGconn *dbhandle;
      PGresult *result;
      char abfrage[1024];
    
      /* Verbinden zur Datenbank */
      dbhandle = PQconnectdb ("dbname=stock1 user=pg");
      if (PQstatus (dbhandle) == CONNECTION_BAD)
      {
        char *message = PQerrorMessage (dbhandle);
        printf ("keine Verbindung: %s \n", message);
        return (1);
      }
      printf ("Verbindung ok\n");
    
      /* Abfrage zur Verbindung */
      printf ("Status: %s\n", PQstatus (dbhandle));
      printf ("Name der Datenbank: %s\n", PQdb (dbhandle));
      printf ("Benutzer: %s\n", PQuser (dbhandle));
      printf ("Passwort: %s\n", PQpass (dbhandle));
      printf ("Host: %s\n", PQhost (dbhandle));
      printf ("Port: %s\n", PQport (dbhandle));
      printf ("TTY: %s\n", PQtty (dbhandle));
      printf ("Optionen: %s\n", PQoptions (dbhandle));
    
      snprintf (abfrage, 123, "vacuumdb --full");
      result = PQexec (dbhandle, abfrage);
      if (result != NULL || PQresultStatus (result) != PGRES_COMMAND_OK)
      {
        printf ("%s", PQerrorMessage (dbhandle));
      }
    
      PQfinish (dbhandle);
      return 0;
    }
    bekomme ich diese Ausgabe:

    Verbindung ok
    Status: (null)
    Name der Datenbank: stock1
    Benutzer: pg
    Passwort:
    Host: (null)
    Port: 5432
    TTY:
    Optionen:
    ERROR: syntax error at or near "vacuumdb" at character 1

    Dabei funktioniert das vacuumdb --full von der Kommandozeite.
    Wieso funktioniert das nicht vom Programm aus?

  2. #2
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    04.10.2001
    Ort
    potsdam
    Beiträge
    881
    Code:
    vacuumdb --full
    das ist keine gültige sql-query, sondern ein externer befehl; dh. entweder öffnest du eine connection zum db-server und führst sql aus, oder du benutzt externe tools wie vacuumdb, die dann ihrerseits die verbindung zur db
    herstellen...

    anweisungen, die du an die db übergibst, kannst du nicht auf der shell, sondern in psql testen
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

  3. #3
    Registrierter Benutzer
    Registriert seit
    22.06.1999
    Beiträge
    677
    In der SQL-Referenz der Postgres-Doku findest Du wie das Kommando in SQL heisst.

  4. #4
    Registrierter Benutzer
    Registriert seit
    23.03.2001
    Beiträge
    650
    Achso; was muß ich denn im C-Programm für vacuumdb --full angeben?

  5. #5
    Registrierter Benutzer
    Registriert seit
    22.06.1999
    Beiträge
    677
    Zitat Zitat von nobody0
    Achso; was muß ich denn im C-Programm für vacuumdb --full angeben?
    Ganz vermeiden lassen wird sich die Lektüre der Postgres-Doku nicht. Bitte schau in der SQL-Referenz unter dem Befehl VACUUM nach.

  6. #6
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    04.10.2001
    Ort
    potsdam
    Beiträge
    881
    schöner hätt ich's nicht sagen können...
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •