datenbankgröße erfassen

hi,

ich hab nicht genau gewusst, worunter ich dies setzen soll, falls es hier falsch ist…egal. :wink:

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.


gruß
thesecondjoker

hi,

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

quelle: http://www.postgresql.org/docs/8.1/interactive/functions-admin.html

cu tb

btw: hab den thread verschoben :wink:

hi,

vielen dank schon mal für die schnelle antwort.

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: :wink:

hi,

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?

cu tb.

bei mir funktioniert das aber nicht.

ich arbeite mit der 8er version von psql.

bei der abfrage

select pg_database_size(’[dbname]’);

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.

tach,

ähm, nicht tabellennahme… datenbankname :confused: sry hab mich da verschreiben bzw. nicht mitgedacht :wink:

ich verwende eine postgresql 8.1 und da funktioniert das. teste die infos bevor ich sie poste :wink:

cu tb.

alternativ bekommst du mit

SELECT oid FROM pg_database WHERE dat_name = '[db name]';

die oid einer datenbank raus. diese kannst du dann in den pg_database_size() einsetzen…

cu tb.

also selbst das mit dem oid herausziehen klappt nicht, denn ich bekomme die meldung, dass dat_name nicht bekannt wäre…

ich danke trotzdem! ich werde morgen nochmal ein bissl rumprobieren und falls ich keine lösung finde, werd ich einfach auf psql 8.1 upgraden!

vielen dank nochmal!

gruß
tsj

mal ne dumme frage: die notwendigen rechte hast du? das ganze mal als postgres ausgeführt?

cu tb.

Hallo,

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:


select pg_database_size(‘postgres’);

select pg_tablespace_size(‘pg_default’);
select pg_tablespace_size(‘pg_global’);

select pg_relation_size(‘pg_database’);
select pg_relation_size(‘pg_description’);



Der Befehl

“SELECT oid FROM pg_database WHERE dat_name = ‘[db name]’;”

kann auch nicht funktionieren weil der Spaltenname nicht “dat_name” sondern “datname” heißt. Mit dem Befehl

“SELECT * FROM pg_database”

läßt sich das leicht herausfinden



mfg

Friedrich Stockebrand

Hallo,

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


weiterhin viel Spass mit PostgreSQL

mwbond

Hallo nochmal,

ich habe noch eine kleine Ergänzung auch zum wie ich meine guten und konkreten Beitrag von fristo.

die Funktion pg_database_size und auch noch einige andere Funktionen zur Datenbankadministration sind erst ab der Version 8.1 verfügbar.


viele Grüße
mwbond

Hallo,

gut, dass Sie darauf hinweisen, dass es die Funktionen erst ab der Version 8.1 verfügbar sind.

Ich arbeite mich gerade in PostgreSQL ein und verwende daher die aktuelle Version 8.1. Kenne aber die Probelmatik von anderen Datenbanken.


mfg
fristo