Ich möchte in einem C/C++ Programm Informationen über eine Tabelle abfragen. Insbesondere möchte ich einzelne Spaltennamen und/oder alle Spaltennamen einer Tabelle abfragen. Zusätzlich möchte ich noch die Datentypen der jeweiligen Spalten in Erfahrung bringen.
Da ich allerdings keine Ahnung von SQL und auch nicht von PostgreSQL habe stehe ich nun vor einem kleinen Problem. Ich hoffe Ihr könnte mir helfen!
Ups … sorry!
Da ich Newbee bin ging ich davon aus, dass die Antwort auf so eine simple Frage niemanden interessieren würde :-).
Da ich eigentlich keine Egoist bin nachfolgend meine Lösung:
mit PQexec eine Anfage an der Server schicken (SELECT * FROM tabelle)
Die Funktion liefert einen Zeiger auf eine struct PGresult
diesen Zeiger übergibt man der Funktion PQnfields() und erhält die Anzahl der Spalten
jetzt kann man in einer Schleife die Spaltennamen von 0 - n Abfragen indem man die Funktion
PQfname() verwendet.
Ist eigentlich kein Problem, ich hatte nur die Funktionen nicht gefunden.
Trotz schlechten Starts auf der Seite würde mich dennoch interessieren, ob jemand eine Möglichkeit kennt die Länge eines Feldes zu erfahren welches mit dem Datentyp VARCHAR(n) definiert wurde. PQfsize gibt leider nur -1 zurück und PQgetlength nur die Länge des Inhaltes des Feldes. Ich glaube ich habe im Handbuch gelesen, dass die maximale Feldlänge in den ersten zwei Bytes des Feldes gespeichert wird und dass deshalb der tatsächliche Platzbedarf größer ist als man zunächst vermuten würde. Kann man diese Information, den Inhalt der zwei Bytes, irgendwie abfragen?
Nein. In diesen beiden Bytes ist außerdem noch mehr kodiert: ob der Wert überhaupt komprimiert ist und ob er ausgelagert ist.
Aber darum kümmert sich PG intern - was das Interface zu sehen bekommt, sind schon die richtigen Daten, ohne Verwaltungsoverhead.
Super! Funktioniert perfekt mit folgender Abfrage:
SELECT character_maximum_length, table_name, column_name FROM information_schema.columns WHERE table_name=‘bdusrdat’ AND column_name=‘usrnam’;