mehrere ähnliche Tabellen mit einem Befehl erzeugen

Hallo zusammen,

da man mir hier schonmal helfen konnte bin ich auf der Suche nach einer möglichkeit wie ich mehrere Tabellen mit nur einem Create Befehl erzeugen könnte… bzw. einem Tipp wie man mehrere Tabellen automatisch erzeugen kann.

ich möchte z.B. die Tabellen … Tabelle0,Tabelle1,Tabelle2…Tabelle100;
welche alle die selben attriebute haben erzeugen…

kann mir jemand sagen nach was ich googlen soll ?

Gruß

und Danke

Hi,

das klingt aber nicht besonders normalisiert, was du da vorhast. Warum nutzt du nicht ein Unterscheidungsfeld, um deine Datensätze zu unterscheiden, anstatt sie in verschiedene Tabellen einzufügen.

Gruß Frank

Warum schreibst du das nicht in ein großes SQL-Statement und führst dieses dann aus?

Gruß Uwe

Hallo frabron,

vielen Dank für die schnelle Antwort.
Die verschiedenen Tabellen bilden Sensoren… Jede Tabelle entspricht einem Sensor.

Es wird woll mehr als 16000 Sensoren geben und alle 10 sek. wird dort jeweils ein wert eingetragen. Wenn man dass ganze in nur eine Tabelle Schreibt würde das ganze um die 16000 einzträge alle 10 sek machen… was ich für extrem viel halte. Ich dachte es würde evt. zu performance verlusten kommen wenn man soviele Datensätze in einer Tabelle hat.

Gruß

Auch wenn das ein ganzer Haufen Holz ist, der da eingetragen werden soll (kenne mich mit so großen Datenmengen nicht wirklich aus) macht es glaube ich keinen Unterschied, ob die Daten in einer oder in 16000 Tabellen sind. Ich würde wirklich ein Feld Sensornummer oder so entwerfen und die Daten in eine Tabelle speichern. Ich denke, mit Indexen wird es da auch nicht zu besonderen Performanceeinbußen kommen, zumal der Zugriff auf die Daten ja wesentlich einfacher zu gestalten ist. Du musst nur eine Tabelle abfragen, anstatt die richtige auszuwählen. Das musst du ja auch irgendwie automatisieren (Clientseitig)!

@frabron:
wenn ist es nicht schneller mit einem SQL-Befehl auf mehrere Tabellen zuzugreifen, als eine tabelle mit mehreren 10K’s zu indizieren?


@Gisman

Meinst du eine Transaktion ?

Also du kannst nicht mehrere Tabellen mit einem Befehl erzeugen.

Abgesehen von den Bedenken, die andere hier schon geäussert haben: du könntest aber eine Master Tabelle erstellen und die anderen davon ableiten. Das wäre ev. noch eine Möglichkeit, Arbeitsaufwand zu sparen.

Hallo ads,
danke für den Tipp.
nach was muss ich googlen ?

Tabellen vererben, oder mal in die Dokumentation zu CREATE TABLE schauen.

Laut Postgresql FAQ ist die Anzahl von Zeilen in einer Tabelle unbegrenzt. Inwieweit das natürlich performant ab einer bestimmten Menge ist, weiss ich leider mangels Erfahrung nicht. Ich denke aber, das ~1Mio Datensätze (und auch mehr) nicht wirklich ein Problem darstellen sollten.
Bei solchen Datenmengen hängt vieles schon von der Art der Abfrage ab und lässt sich glaube ich auch nicht pauschal beantworten (Stichwort Sortierung).

Bedenke jedoch, dass bei 24/7 Messzeit du auch schon ~60.000 Datensätze pro Sensor zusammenkommen, du also zwangsläufig auf das selbe Problem stossen wirst wie bei einer Tabelle. Und dann hast du noch 16.000 (das muss man sich mal auf der Zunge zergehen lassen) Einzeltabellen, die du warten, abfragen, und was weiss ich noch alles, musst.

Zumal das zeitgleiche Schreiben von 16.000 Datensätzen (egal ob in 1 oder 16 Tabellen) sich eh noch interssant gestalten dürfte. Auf was für einem Rechner soll die DB denn laufen?

@frabron

;-------- Edit ----------------------------
Es handelt sich dann wahrscheinlich um einen Windows XP System
;-------- /Edit ----------------------------


Das habe ich auch gerade berechnet :frowning:

ich habe eine neue strategie… ich möchte nur die letzten 1000 Messungen in meiner Datenbank speichern, wenn die Messungsnummer 1001 kommt soll die erste in eine Backupdatei geschrieben werden… dies müste doch über einen Triggerbefehl gehen oder? ( sorry für die vielen zum teil selbstverständlichen Fragen aber ich habe mich dass letzte mal vor 5 Jahren mit Datenbanken auseinander gesetzt und arbeite mich jetzt nochmal neu ein)


Also nochmal ich möchte folgendes…
ich erstelle eine tabelle welche besteht aus
:Messsungsnummer:Sensorpunkt:Sensorwert

Nun möchte ich maximal 1000 Messungen in meiner Tabelle behalten wenn es mehr werden soll die älteste(FIFO prinzip) in eine eigenständige Datei “gebackupt” werden… ist dies möglich, wenn ja unter welchem stichwort muss ich suchen ?

Danke für eure Hilfe

Ich glaube, in das Projekt möchte ich involviert sein.

Da stellen sich noch ganz andere Probleme als nur 16k Tabellen.

  • VACUUM bzw. speziell ANALYZE
  • Wie lange werden Daten vorgehalten - das Löschen wird interessant
  • das Verteilen der Daten auf diverse Platten
  • die Daten wollen auch ausgelesen und ganz sicher aggregiert werden, das sollte man vorher planen

MOGnew: deine Idee ist prinzipiell möglich, hat aber mehrere Nachteile:

  • zum einen kannst du für so etwas RRD (Round-Robin-Database) nutzen, das ist wesentlich sinnvoller und aggregiert die Daten gleich nebenbei.
  • zum anderen ist das Löschen bei jedem Schreibzugriff langsam, weil du pro Schreiben auch die komplette Tabelle durchsuchen musst: lagere so etwas in einen Cronjob aus.

Darf ich fragen, was ihr mit dem Projekt plant bzw. wer dahinter steckt? 16k Sensoren verteilt man ja nicht mal eben irgendwo und die Logistik für die Sensoranbindung ist sicher auch nicht ohne …

@ADS
es handelt sich um ein Projekt welches ich gerade in den Semesterferien im Labor der FH betreue… ich würde dich gerne im ICQ adden damit ich dir mehr darüber erzählen kann… past es dir ?

Lass dich nicht aufhalten.

Mal abgesehen davon, das die Idee nicht wirklich gut ist, was ja auch schon andere hier sagten: mit plpgsql kannst Du via EXECUTE dynamisch SQL erzeugen und ausführen.

Andreas