ich hab nicht genau gewusst, worunter ich dies setzen soll, falls es hier falsch ist…egal.
wie kann ich am einfachsten die datenbankgröße ermitteln? ich hab schon sämtliche quellen im netz und in büchern durch und hab nichts wirklich brauchbares gefunden.
ein vorschlag wäre folgendes:
select pg_database_size([oid der datenbank])
würde durchaus funktionieren, doch müsste ich die oid der datenbank abfragen können. ich weiss allerdings nicht wie ich das mache. ich hab es lediglich hinbekommen, die oid der relation herauszufinden mit
select oid from pg_class where relname = '[tabellenname]';
kann mit bitte jemand helfen?
ich will das ganze über php abfragen und im frontend ausgeben. habe keine passende php-funktion gefunden.
wieso verwendest du net einfach den tabellennamen? folgendes steht zu dem befehl im handbuch…
pg_database_size(oid) : bigint : Disk space used by the database with the specified OID
pg_database_size(name) : bigint : Disk space used by the database with the specified name
ich habe das, was du angegeben hast, zwar schon getestet gehabt, aber hab es nochmals getan. es funktioniert nicht!
außerdem ist die syntax sehr dumm gewählt. wenn man eine funktion namens pg_database_size() hat, dann wird man wohl auf die idee kommen, dass dies für die größe der “datenbank” zuständig ist und…wat is…nichts!
also wenn ich den namen meiner tabelle angebe, gibt mir die shell aus
“column XXX does not exist”
und wenn ich angeben tabelle.spalte dann kommt die meldung das ich umwandeln müsste, weil der typ oid verlangt wird!
voll ätzend! ich kann kaum glauben, dass die deppen nicht dran gedacht haben mal die gesamtgröße der datenbank abzufragen! :evil:
also ich hab das soeben nochmals bei mir gestestet. habe eine datenbank d2727_1 und eine test und ein
SELECT pg_database_size(‘d2727_1’);
liefert mir die größe date datenbank d2727_1. das ganze mit test liefert mir die große der test db… wieso soll der funktionsname dumm gewählt sein? er macht doch genau das was er soll.
bei welcher abfrage gibt es die column meldung aus?
bekomme ich die meldung zurück, dass der eintrag nicht vom typ oid wäre und ich das umwandeln bzw. konvertieren muss.
dass der name dumm gewählt ist, ist darauf bezogen, dass du mir sagtest, dass ich einfach den tabellennamen nehmen soll, was allerdings nicht der sinn der sache wäre.
alle Information, die eine Datenbank intern benötigt stehen in den System-Tabellen in postgreSql “System Catalogs” genannt. In der Doku sind diese Tabellen in Kapitel 42 alle beschrieben. Mit den in Kapitel 9.19 und 9.20 beschriebenen Funktionen kann man sich auf einfachste Art Information aus den System-Tabellen holen. Wenn man administrative Rechte hat, kann man auch direkt die System-Tabellen abfragen.
Zum Thema “datenbankgröße erfassen” habe ich mal einige Beispiele, die sich auf die Default-Installation von postgreSQL beziehen, zusammengestellt. Vielleicht hilft das weiter:
falls ich die Spaltennamen einer Tabelle nicht kenne, benutze ich das Metakommando ‘\d’ Tabellenname. Dieser Befehl zeigt mir alle Spaltenname und den jeweiligen Datentyp an.
:idea: ‘?’ zeigt alle verfügbaren Metakommandos an.
Beispiel:
psql -U postgres -d dbname
dbname=#\d tabellenname - liefert alle Spalteninfos dieser Tabelle