PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PQexec (dbhandle, "vacuumdb"); funktioniert nicht



nobody0
03-06-2006, 10:18
Mit diesem Programm



#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? :confused:

elrond
06-06-2006, 07:48
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 ;)

Christoph
06-06-2006, 08:04
In der SQL-Referenz der Postgres-Doku findest Du wie das Kommando in SQL heisst.

nobody0
06-06-2006, 12:37
Achso; was muß ich denn im C-Programm für vacuumdb --full angeben? :confused:

Christoph
06-06-2006, 13:42
Achso; was muß ich denn im C-Programm für vacuumdb --full angeben? :confused:
Ganz vermeiden lassen wird sich die Lektüre der Postgres-Doku nicht. Bitte schau in der SQL-Referenz unter dem Befehl VACUUM nach.

elrond
06-06-2006, 13:44
schöner hätt ich's nicht sagen können... :rolleyes: