Hallo zusammen,
Ich möchte eine Applikation zur automatischen Partitionierung an PostgreSQL anpassen (sie existiert bereits für ein anderes DBMS). Um in jedem Zustand sauber wiederaufsetzen zu können muss Ich den aktuellen Ist-Stand der Partitionierung ermitteln können. Als Startpunkt kenne Ich alle Basis-Tabellen, zu denen Ich abgeleitete Partitionstabellen erwarte. Wie kann man ausgehend von den Basis-Tabellen folgendes herausfinden:
- Alle Namen der von der Basistabelle abgeleiteten Tabellen
- Die Check-Constraints dieser abgeleiteten Tabellen oder allgemeiner die Check-Constraints einer Tabelle
- Die Trigger (mit Code) auf der Basistabelle
- Die Indexe der abgeleiteten Tabelle bzw. allgemeiner einer Tabelle
Zusätzlich muss Ich noch herausfinden, ob Funktionen mit bestimmten Namen existieren. Ich bin sicher nicht der erste der die Verwaltung und Änderung des Partitionierungsschemas per Programm durchführen will. Gibt es möglicherweise bereits öffentlich verfügbaren Code, der die Initialisierung aus den PostgreSQL Metadaten demonstriert?
Über pg_class und pg_inherits
http://www.postgresql.org/docs/current/static/catalog-pg-class.html
http://www.postgresql.org/docs/current/static/catalog-pg-inherits.html
Über pg_constraintsDie Check-Constraints dieser abgeleiteten Tabellen oder allgemeiner die Check-Constraints einer Tabelle
http://www.postgresql.org/docs/current/static/catalog-pg-constraint.html
Über pg_class und pg_triggerDie Trigger (mit Code) auf der Basistabelle
http://www.postgresql.org/docs/current/static/catalog-pg-trigger.html
Über pg_indexDie Indexe der abgeleiteten Tabelle bzw. allgemeiner einer Tabelle
http://www.postgresql.org/docs/current/static/catalog-pg-index.html
Über pg_procZusätzlich muss Ich noch herausfinden, ob Funktionen mit bestimmten Namen existieren.
http://www.postgresql.org/docs/current/static/catalog-pg-proc.html
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'
Danke für die Informationen. Die SQL-Statements sähen dann konkret so aus:
Alle von einer Tabelle abgeleiteten Tabellen ermitteln:
----------------------------------------------------------
select oid,relname from pg_class where oid in
( select inhrelid from pg_inherits where inhparent in
( select oid from pg_class where relname = 'test___'));
Zu einer Tabelle alle darauf definierten Check-Constraints (mit Quelltext) ermitteln:
select oid,consrc from pg_constraint where conrelid in
( select oid from pg_class where relname = 'test___2010')
and contype = 'c';
Alle auf einer Tabelle definierten Trigger und die Id der aufgerufenen Funktion ermitteln:
select tgname,tgfoid from pg_trigger where tgrelid in
(select oid from pg_class where relname = 'test___');
Alle Indexe zu einer Tabelle ermitteln:
select oid,relname from pg_class where oid in
(select indexrelid from pg_index where indrelid in
( select oid from pg_class where relname = 'test___2010'));
Informationen zu einer Funktion mit einem bestimmten Namen ermitteln:
select * from pg_proc where proname = 'insert_procedure_test___';
----------------------------------------------------------
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen