Während der Arbeit mit PostgreSQL haben sich mehr als hundert Funktionen für die Arbeit mit Systemverzeichnissen angesammelt: pg_class, pg_attribute, pg_constraints usw.
Was tun mit ihnen? Sie werden relativ selten eingesetzt. In ein Projekt einbeziehen? Der Krasnojarsker Kunde wird für solchen "Unsinn" nicht bezahlen. Und doch, was ist, wenn sie jemand anderem als dem Autor nützlich sind? Und er beschloss, sie wie gelesene Bücher in einen öffentlichen Schrank für diejenigen zu stellen, die es wünschen.
Jemand möchte sie in seiner Arbeit verwenden. Und jemand, der sich für etwas anderes als seine Erfahrung mit Systemkatalogen interessiert.
Aber um die Veröffentlichung nicht in eine langweilige Aufzählung zu verwandeln, ist nicht bekannt, warum die Funktionen erstellt wurden. Ich habe mich entschlossen, auf diejenigen von ihnen einzugehen, die durch ein gemeinsames Ziel vereint werden können. Daher werden die Funktionen ausgewählt, mit denen eine erweiterte Liste von Merkmalen einer beliebigen Datenbanktabelle angezeigt wird.
Die erweiterte Liste der Datenbanktabellenmerkmale wird von der Funktion
admtf_Table_ComplexFeatures zurückgegeben , die in diesem Artikel als
Kopffunktion bezeichnet wird. Daher beschränkt sich der Artikel auf die Berücksichtigung von Funktionen, die beim Ausführen der Kopffunktion aufgerufen werden.
Die erste Hälfte des Artikels enthält Kommentare zur Implementierung von Funktionen. Der zweite ist der Quellcode der Funktionen. Für diejenigen Leser, die nur an den Ausgangstexten interessiert sind, empfehlen wir, sofort mit dem
Anhang fortzufahren .
Siehe auch
Funktionen zum Dokumentieren von PostgreSQL-Datenbanken. Teil zwei ;
Funktionen zum Dokumentieren von PostgreSQL-Datenbanken. Teil drei .
Funktionen zum Dokumentieren von PostgreSQL-Datenbanken. Das Ende (Teil vier) .
Über welche erweiterten Funktionen sprechen wir?
Um eine Vorstellung davon zu bekommen, was unter den erweiterten Merkmalen der Datenbanktabelle zu verstehen ist, betrachten wir zunächst die folgende Liste von Merkmalen. Die Liste enthält die Merkmale der Street-Datenbanktabelle, die von
admtf_Table_ComplexFeatures ( 'public' , 'street' ) zurückgegeben wird .
Die folgende Tabelle enthält eine abgekürzte Liste der Street-Tabellenfunktionen. Ein vollständiger Satz von Merkmalen dieser Tabelle ist in den ergänzenden Materialien von Anhang 2 angegeben.
Tabelle 1. Erweiterte Funktionen der Street-Tabelle.

Die Textversion der Tabelle in der AbbildungKategorie | Nein, nein. | Titel | Kommentar | Typ | Basistyp | ? nicht NULL |
---|
tbl | 0 | Straße | Liste der Straßen in Siedlungen | | | |
att | 1 | wcrccode | Ländercode | wcrccode | smallint | t |
att | 2 | localityid | Community ID | localityid | Ganzzahl | t |
att | 3 | streetid | ID Straße des Dorfes | streetid | smallint | t |
att | 4 | Streettypeacrm | Straßenakronym | Streettypeacrm | Zeichen (8) | f |
att | 5 | Straßenname | Straßenname | Streettypeacrm | varchar (150) | t |
pk | 0 | xpkstreet | Straßentisch Primärschlüssel | | | |
pkatt | 1 | wcrccode | Ländercode | wcrccode | smallint | t |
fk01 | 1 | fk_street_locality | Fremdschlüssel der Tabelle | | | |
fk02 | 2 | fk_street_streettype | Fremdschlüssel der Tabelle | | | |
idx01 | 1 | xie1street | Index nach Typ und Straßenname der Siedlung | | | |
idx02 | 2 | xie2street | Postleitzahl | | | |
idx03 | 3 | xie3street | Index der Straßennamen aller Siedlungen | | | |
idx04 | 4 | xpkstreet | Der eindeutige Index (Primärschlüssel) der Straßentabelle | | | |
Wenn Sie die Feindseligkeit gegenüber diesem Satz von Buchstaben und Zahlen aufzählen, können Sie sehen, dass es sich um die üblichen Merkmale einer Datenbanktabelle handelt:
- Tabellennamen;
- Die Liste der Tabellenattribute und ihrer Typen;
- Der Primärschlüssel und die Liste der Fremdschlüssel der Tabelle zusammen mit den Attributen der Tabelle, aus denen sie bestehen.
- Eine Liste der Tabellenindizes.
Die Eindeutigkeit jedes Eintrags aus der Liste der Merkmale wird durch die Werte der Felder "Kategorie" und die Seriennummer ("Nr.") Des Merkmals sichergestellt.
Tabelle 2. Kategorien von Tabelleneigenschaften.
Die Textversion der Tabelle in der AbbildungAkronym | Termin |
---|
tb | Tabelleneigenschaften |
att | Eigenschaften von Tabellenattributen |
seq | Sequenzcharakteristika |
pk | Hauptmerkmale |
pkAtt | Merkmale der Primärschlüsselattribute |
fk99 | Fremdschlüsselmerkmale |
fk99att | Fremdschlüsselattributmerkmale |
fk99rtbl | Merkmale der Tabelle, auf die der Fremdschlüssel verweist |
fk99ratt | Attributmerkmale der Tabelle, auf die der Fremdschlüssel verweist |
Idx99 | Indexmerkmale |
Idx99att | Indexattributmerkmale |
Inhtbl99 | Eigenschaften der generierten Tabelle |
Der Kategoriewert ist erforderlich, um verschiedene Gruppen von Merkmalen voneinander zu unterscheiden. Eine Seriennummer, um die Merkmale innerhalb der Gruppe zu unterscheiden.
In der Datenbanktabelle können mehrere Fremdschlüssel (FOREIGN KEY) und Indizes deklariert werden. Daher enthält der Kategoriewert für diese Merkmale und ihre Nachkommen eine Seriennummer. Beispielsweise gibt ein Eintrag mit dem Schlüssel "Category" = idx02att und "No." = 1 das erste Attribut des 2. Index an.
In der obigen Liste der Kategorien wird der Speicherort der Seriennummer als "99" angegeben.
Bemerkung 1

der Quellcode des Operators in der AbbildungSELECT * FROM admtf_Table_ComplexFeatures('pg_catalog','pg_class');
Der Artikel enthält Beispiele für die Eigenschaften von Tabellen, die in einem Hilfsschema kurz beschrieben werden , das speziell zur Demonstration der Funktionen von Funktionen erstellt wurde. Nachdem der Leser diese oder jene Funktion in seiner Datenbank erstellt hat, kann er die Namen seiner Schemata und Tabellen als Parameter verwenden. Darüber hinaus kann beispielsweise das Verzeichnis pg_class als Parameter verwendet werden, obwohl in diesem Fall eine begrenzte Anzahl von Merkmalen ausgegeben wird.
Das Ende der Bemerkung.
Struktur der Kopffunktion
Abb. 1. Die Funktionen, die die Kopffunktion verursachen.Tabelle 3. Zuweisung von Funktionen.
Die Textversion der Tabelle in der AbbildungNein, nein. | Titel | Termin |
---|
1 | admtf_Table_Features | Die Funktion gibt eine Liste der Datenbanktabellenmerkmale zurück |
2 | admtf_Table_Attributes | Die Funktion gibt eine Liste der Datenbanktabellenattribute und ihrer Eigenschaften zurück. |
3 | admtf_Table_Constraintes | Die Funktion gibt eine Liste der Datenbanktabelleneinschränkungen und ihrer Eigenschaften zurück. |
4 | admtf_Table_Indexes | Die Funktion gibt eine Liste der Datenbanktabellenindizes und ihrer Merkmale zurück. |
5 | admtf_Table_InheritanceChildrens | Die Funktion gibt eine Liste der von (IHERITS) aus der Quelldatenbanktabelle generierten Tabellen zurück. |
6 | admtf_Table_Sequences | Die Funktion gibt eine Liste von Sequenzen (SEQUENCE) zurück, von denen die Tabelle abhängt. |
7 | admtf_PrimaryKey_ComplexFeatures | Die Funktion gibt eine vollständige (erweiterte) Liste der Primärschlüsselmerkmale (PRIMARY KEY) der Datenbanktabelle zurück. |
8 | admtf_ForeignKey_ComplexFeatures | Die Funktion gibt eine vollständige (erweiterte) Liste der Fremdschlüsselmerkmale (FOREIGN KEY) der Datenbanktabelle zurück. |
9 | admtf_Index_ComplexFeatures | Die Funktion gibt eine vollständige (erweiterte) Liste der Merkmale des Datenbanktabellenindex zurück. |
10 | admtf_Table_ComplexFeatures | Die Funktion gibt eine vollständige (erweiterte) Liste der Datenbanktabellenmerkmale zurück. |
Bemerkung 2.
Funktionsbeschreibungen werden in der oben angegebenen Reihenfolge angeordnet. Der Grund ist, dass der Artikel in mehrere Teile unterteilt werden muss. Und Funktionen, die in dieser Reihenfolge angeordnet sind, können verwendet werden, unabhängig davon, dass einige von ihnen nur in den folgenden Teilen der Veröffentlichung beschrieben werden.
Das Ende der Bemerkung.
Admtf_Table_Features-Funktionsliste der Datenbanktabellenmerkmale
Die Funktion admtf_Table_Features gibt eine Liste der Merkmale der Datenbanktabelle selbst zurück. Der Quellcode kann hier angezeigt und heruntergeladen werden.
Als Parameter verwendet die Funktion den Namen der Quelltabelle (a_TableName ) und den Namen des Schemas, in dem die Tabelle erstellt wird ( a_SchemaName ).
Die Funktion extrahiert die Hauptdaten aus dem Katalogeintrag pg_class , der neben Tabelleneinträgen auch Datensätze zu Sequenzen, Ansichten, materialisierten Ansichten und zusammengesetzten Typen enthält. Daher wird zur Auswahl von Tabellen die Bedingung relkind = 'r' verwendet .
SELECT tbl.relname,dsc.description,tbl.relnatts::INTEGER,tbl.relchecks::INTEGER, tbl.relhaspkey,tbl.relhasindex,tbl.relhassubclass,tbl.reltuples::INTEGER FROM pg_class tbl INNER JOIN pg_namespace nspc ON tbl.relnamespace = nspc.oid LEFT OUTER JOIN pg_description dsc ON tbl.oid=dsc.objoid AND dsc.objsubid=0 WHERE LOWER( nspc.nspname)=LOWER(a_SchemaName) AND tbl.relkind='r' AND LOWER(tbl.relname) =LOWER(a_TableName);
Zusätzlich greift die Funktion auf die Verzeichnisdaten pg_namespace und pg_description zu . Das erste enthält die Namen der Datenbankschemata und das zweite enthält Kommentare zu allen Datenbankobjekten.
Es ist wichtig, auf die Bedingung objsubid = 0 zu achten. Es definiert den Kommentar zur Tabelle, da der Wert des Feldes objoid sowohl für die Tabelle als auch für ihre Attribute gleich ist. Der Kommentar zum Attribut der Tabelle ist in dem Eintrag enthalten, in dem objsubid mit der Nummer dieses Attributs übereinstimmt .
Tabelle 4. Das Ergebnis der Ausführung der Funktion admtf_Table_Features ('public', 'Street').Titel | Kommentar | Anzahl der Attribute | Anzahl der CHECK-Einschränkungen | ? Gibt es einen Primärschlüssel? | ? sind Indizes deklariert | ? Gibt es Nachkommen? | Die Anzahl der Einträge in der Tabelle |
---|
Straße | Liste der Straßen in Siedlungen | 22 | 0 | t | t | f | 20150 |
Bemerkung 3
Achten Sie auf die Anzahl der Straßentabellenattribute. Es unterscheidet sich erheblich von der Anzahl der im Hilfsschema angegebenen Attribute.
Tabelle 5. Zusätzliche Attribute der Street-Tabelle.
attname | atttypid | attnum | Hinweis |
---|
cmin | 29 | -4 | Systemattribut |
xmin | 28 | -3 | Systemattribut |
ctid | 27 | -1 | Systemattribut |
wcrccode | 795369 | 1 | Gültiges Attribut |
localityid | 795352 | 2 | Gültiges Attribut |
streetid | 795364 | 3 | Gültiges Attribut |
Streettypeacrm | 1919168 | 4 | Gültiges Attribut |
Straßenname | 1043 | 5 | Gültiges Attribut |
........ pg.dropped.6 ........ | 0 | 6 | Remote-Attribut |
........ pg.dropped.7 ........ | 0 | 7 | Remote-Attribut |
Tatsache ist, dass PostgreSQL zusätzlich zu den Hauptattributen zusätzlich mehrere Systemattribute und sogar gelöschte Attribute berücksichtigt.
Bemerkung beenden
Funktion admtf_Table_Attributes Liste der Datenbanktabellenattribute und ihrer Eigenschaften
Die Funktion admtf_Table_Attributes gibt eine Liste der Datenbanktabellenattribute zurück. Der Quellcode kann hier angezeigt und heruntergeladen werden.
Als Parameter verwendet die Funktion den Namen der Quelltabelle ( a_TableName ) und den Namen des Schemas, in dem die Tabelle erstellt wird ( a_SchemaName ).
Die Funktion ruft die Hauptdaten aus den Verzeichniseinträgen pg_attribute und pg_type ab . Der erste enthält Datensätze mit Daten zu den Attributen von Tabellen, Ansichten, materialisierten Ansichten, zusammengesetzten Typen und sogar Funktionen. Die zweite betrifft die Eigenschaften von Attributtypen.
Möglicherweise ist eine Klarstellung erforderlich, wie die Benutzer- und Basistypen in der Funktion definiert sind.
Ein Tabellenattribut wird mit einem benutzerdefinierten Typ deklariert, wenn das Feld typbasetype im entsprechenden Verzeichniseintrag pg_type größer als 0 ist. Andernfalls ist das Attribut vom Basistyp. Daher ist das Verzeichnis pg_type zweimal an der FROM-Klausel beteiligt. Im ersten Verzeichniseintrag wird das Vorhandensein eines Benutzertyps ermittelt. Wenn dieser nicht definiert ist ( typbasetype = 0 ), wird aus diesem Eintrag ein Basistypwert generiert. Andernfalls wird der Basistyp aus dem Datensatz bestimmt, für den btyp.OID = typ.typbasetype ist.
Direkt wird die Linie mit dem Basistyp mit der Funktion des Systemkatalogs FORMAT_TYPE (type_oid, typemod) gebildet . Der erste Parameter sind die OID-Datensätze des Basistyps. Der zweite Parameter ist der Modifikatorwert für Typen, die eine Größe enthalten. Zum Beispiel VARCHAR (100) oder NUMERIC (4,2), DECIMAL (4,2). Der Wert des typemod- Parameters wird von typ.typtypmod übernommen, wenn das Attribut von einem Benutzertyp ist, andernfalls von attr.atttypmod , d. H. direkt aus einem Attributdatensatz.

der Quellcode des Operators in der Abbildung SELECT attr.attnum, attr.attname::VARCHAR(100), CASE WHEN COALESCE(typ.typbasetype,0)>0 THEN typ.typname::VARCHAR(100) ELSE '' END, FORMAT_TYPE(COALESCE(NULLIF(typ.typbasetype,0),typ.oid), COALESCE(NULLIF(typ.typtypmod,-1),attr.atttypmod))::VARCHAR(256), attr.attnotnull, dsc.description FROM pg_attribute attr INNER JOIN pg_class tbl ON tbl.oid = attr.attrelid INNER JOIN pg_namespace nspc ON tbl.relnamespace = nspc.oid INNER JOIN pg_type typ ON attr.atttypid=typ.oid LEFT OUTER JOIN pg_description dsc ON dsc.objoid=attr.attrelid AND dsc.objsubid=attr.attnum WHERE LOWER( nspc.nspname)=LOWER(a_SchemaName) AND LOWER(tbl.relname) =LOWER(a_TableName) AND tbl.relkind='r' AND attr.attnum>0 AND attr.atttypID>0 ORDER BY tbl.relname,attr.attnum;
Zusätzlich greift die Funktion auf die Verzeichnisdaten pg_class , pg_namespace und pg_description zu . Das erste und zweite Verzeichnis werden verwendet, um nach Attributen anhand der Namen des Schemas und der Datenbanktabelle zu suchen.
Das dritte Verzeichnis wird verwendet, um den Kommentar für das Tabellenattribut abzurufen.
Der Kommentar zum Attribut der Tabelle befindet sich in dem Eintrag, in dem dsc.objoid die OID der Quelltabelle enthält, und dsc.objsubid ist die Seriennummer des Attributs in der Tabelle, d. H. attr.attnum .
Um zu verhindern, dass die Funktion System- und Remote-Attribute zurückgibt , setzt die WHERE-Klausel die Bedingung attr.attnum> 0 AND attr.atttypID> 0 .
Tabelle 6. Das Ergebnis der Ausführung der Funktion admtf_Table_Attributes ('public', 'Street').Nein, nein. | Titel | Benutzerdefinierter Typ | Basistyp | ? nicht NULL | Kommentar |
---|
1 | wcrccode | wcrccode | smallint | t | Ländercode |
2 | localityid | localityid | Ganzzahl | t | Community ID |
3 | streetid | streetid | smallint | t | ID Straße des Dorfes |
4 | Streettypeacrm | Streettypeacrm | Zeichen (8) | f | Straßenakronym |
5 | Straßenname | | varchar (150) | t | Name der Straße der Siedlung |
Funktionsversion mit Regclass-Alias für Typ oid
PostgreSQL-Objektkennungen (OIDs) sind vom gleichen Typ wie OID, die derzeit als vorzeichenlose 4-Byte-Ganzzahl implementiert ist. Aufgrund des Vorhandenseins von Aliasnamen dieses Typs kann eine Ganzzahl als Name eines Objekts dargestellt werden. Und umgekehrt - konvertieren Sie den Objektnamen in eine Ganzzahl vom Typ OID.
Schauen Sie sich als Beispiel die folgende SELECT-Anweisung an . Es ruft ungewöhnlich die Namen der Attributtabelle und die Namen ihrer Typen ab - anstatt auf die entsprechenden Verzeichnisfelder mit den Namen dieser Merkmale zuzugreifen, werden sie verwendet:
- attrelid :: regclass (attrelid :: regclass: NAME) ,
- atttypid :: regtype (atttypid :: regtype: NAME)
- typbasetype :: regtype (typbasetype :: regtype: NAME) .
SELECT attr.attname,attr.attrelid::regclass, attr.atttypid::regtype, typ.typbasetype::regtype,attr.attrelid::regclass::name, attr.atttypid::regtype::name,typ.typbasetype::regtype::name FROM pg_attribute attr INNER JOIN pg_type typ ON attr.atttypid=typ.oid WHERE attr.attrelid=('public'||'.'||'Street')::regclass AND attr.attnum>0 AND attr.atttypID>0 ORDER BY attr.attnum;
Das Folgende ist das Ergebnis der Ausführung dieser Abfrage.

In der Liste der Ausgabewerte des Operators SELECT vor der Konvertierung unter Verwendung von Aliasnamen des Typs OID sind alle Werte außer dem Attributnamen numerisch. Infolgedessen werden die Tabellennamen und Attributtypen angezeigt. Die Arten von Ausgabewerten können in der zweiten Zeile des Tabellenkopfs berücksichtigt werden.
Außerdem befindet sich in der WHERE-Klausel der Anweisung die Bedingung attr.attrelid = ('public' || '.' || 'Street') :: regclass , auf deren linker Seite sich ein numerischer Wert befindet und auf der rechten Seite eine Zeichenfolge, die mit in einen numerischen Wert konvertiert wird Verwenden der Alias- Regklasse .

der Quellcode des Operators in der Abbildung SELECT attr.attnum, attr.attname::VARCHAR(100), CASE WHEN COALESCE(typ.typbasetype,0)>0 THEN typ.typname::VARCHAR(100) ELSE '' END, FORMAT_TYPE(COALESCE(NULLIF(typ.typbasetype,0),typ.oid), COALESCE(NULLIF(typ.typtypmod,-1),attr.atttypmod))::VARCHAR(256), attr.attnotnull, dsc.description FROM pg_attribute attr INNER JOIN pg_type typ ON attr.atttypid=typ.oid LEFT OUTER JOIN pg_description dsc ON dsc.objoid=attr.attrelid AND dsc.objsubid=attr.attnum WHERE attr.attrelid=( a_SchemaName ||'.'|| a_TableName)::regclass AND attr.attnum>0 AND attr.atttypID>0 ORDER BY attr.attnum;
Mit der Alias-Regklasse aus der Hauptanweisung können Sie die Verbindung zu zwei Verzeichnissen entfernen. Eine solche Verbesserung hatte jedoch fast keine Auswirkungen auf die Leistung der Funktion - in beiden Versionen wird die Funktion in 11 ms ausgeführt. Möglicherweise aufgrund der Tatsache, dass die Testtabelle nur wenige Attribute aufweist.
Bemerkung 4Ein schwerwiegender Fehler in der Bedingung in der Form attr.attrelid = (a_SchemaName || '.' || a_TableName) :: regclass wird angezeigt, wenn die Datenbank ein Schema und / oder eine Tabelle mit einem ungewöhnlichen Namen enthält. Zum Beispiel "Mein Schema" und / oder "Meine Tabelle" . Solche Werte müssen in doppelten Anführungszeichen übertragen werden oder die Funktion QUOTE_IDENT verwenden, da sonst die Funktion mit einem Systemfehler fehlschlägt.

der Quellcode des Operators in der Abbildung SELECT attr.attname,attr.attrelid::regclass, attr.atttypid::regtype,typ.typbasetype::regtype, attr.attrelid::regclass::name, attr.atttypid::regtype::name,typ.typbasetype::regtype::name FROM pg_attribute attr INNER JOIN pg_type typ ON attr.atttypid=typ.oid WHERE attr.attrelid=(' '||'.'||' ')::regclass AND attr.attnum>0 AND attr.atttypID>0 ORDER BY attr.attnum; SELECT attr.attname,attr.attrelid::regclass, attr.atttypid::regtype,typ.typbasetype::regtype, attr.attrelid::regclass::name, attr.atttypid::regtype::name,typ.typbasetype::regtype::name FROM pg_attribute attr INNER JOIN pg_type typ ON attr.atttypid=typ.oid WHERE attr.attrelid=('" "'||'.'||'" "')::regclass AND attr.attnum>0 AND attr.atttypID>0 ORDER BY attr.attnum;
Daher bevorzuge ich Bedingungen in der Form
LOWER (nspc.nspname) = LOWER (a_SchemaName) UND LOWER (tbl.relname) = LOWER (a_TableName) , was nicht zu Systemfehlern führt.
Bemerkung beendenANHANG 1. Skripte
Erstellen der Funktion admtf_Table_Features
Kommentare zum Funktionsquellcode finden Sie hier.Funktionsquellcode BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admtf_Table_Features (a_SchemaName NAME,a_TableName NAME); CREATE OR REPLACE FUNCTION admtf_Table_Features (a_SchemaName NAME default 'public', a_TableName NAME default NULL ) RETURNS TABLE (rs_TableName NAME,rs_TableDescription TEXT,rs_NumberOfAttribute INTEGER,rs_NumberOfChecks INTEGER,rs_hasPKey BOOLEAN,rs_hasIndex BOOLEAN,rs_hasSubClass BOOLEAN,rs_NumberOfRow INTEGER) AS $BODY$ DECLARE c_TableKind CONSTANT CHAR:='r'; v_TableOID OID; v_TableName NAME; v_TableDescription TEXT; v_TableNumberOfRowCalc INTEGER;
Erstellen der Funktion admtf_Table_Attributes
Kommentare zum Funktionsquellcode finden Sie hier.Funktionsquellcode BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admtf_Table_Attributes (a_SchemaName NAME,a_TableName NAME); CREATE OR REPLACE FUNCTION admtf_Table_Attributes (a_SchemaName NAME default 'public', a_TableName NAME default NULL ) RETURNS TABLE (r_AttributeNumber SMALLINT,r_AttributeName NAME,r_UserTypeName NAME,r_TypeName NAME,r_isNotNULL BOOLEAN, r_Description Text) AS $BODY$ DECLARE c_TableKind CONSTANT CHAR:='r'; v_Scale INTEGER;
Erstellen der Funktion admtf_Table_Attributes mithilfe des Regclass-Alias
Kommentare zum Funktionsquellcode finden Sie hier.Funktionsquellcode BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admtf_Table_Attributes (a_SchemaName NAME,a_TableName NAME); CREATE OR REPLACE FUNCTION admtf_Table_Attributes (a_SchemaName NAME default 'public', a_TableName NAME default NULL ) RETURNS TABLE (r_AttributeNumber SMALLINT,r_AttributeName NAME,r_UserTypeName NAME,r_TypeName NAME,r_isNotNULL BOOLEAN, r_Description Text) AS $BODY$ DECLARE c_TableKind CONSTANT CHAR:='r'; v_Scale INTEGER;
ANHANG 2. Zusätzliche Materialien
Hilfsdatenbankschema

- LAND - Klassifikator der Länder der Welt - OKSM (Allrussische Klassifikation der Länder der Welt);
- HOUSEADDR - Liste der Hausnummern auf den Straßen von Siedlungen;
- LCLTYTYPE - Verzeichnis der Siedlungsarten;
- LOKALITÄT - Liste der Siedlungen;
- STRASSE - Liste der Straßen in Siedlungen;
- STREETTYPE — ;
- TERRITORY — (, , , ..);
- TERRITORYTYPE — .
Street ()
.1. Street ().
Kategorie | Nein, nein. | Titel | Kommentar | | | ? not NULL |
---|
tbl | 0 | street | | | | |
att | 1 | wcrccode | | wcrccode | smallint | t |
att | 2 | localityid | | localityid | integer | t |
att | 3 | streetid | | streetid | smallint | t |
att | 4 | streettypeacrm | | streettypeacrm | character(8) | f |
att | 5 | streetname | | streettypeacrm | varchar(150) | t |
pk | 0 | xpkstreet | street | | | |
pkatt | 1 | wcrccode | | wcrccode | smallint | t |
pkatt | 2 | localityid | | localityid | integer | t |
pkatt | 3 | streetid | | streetid | smallint | t |
fk01 | 1 | fk_street_locality | | | | |
fk01att | 1 | wcrccode | | wcrccode | smallint | t |
fk01att | 2 | localityid | | localityid | integer | t |
fk01rtbl | 0 | locality | | | | |
fk01ratt | 1 | wcrccode | | wcrccode | smallint | t |
fk01ratt | 2 | localityid | | localityid | integer | t |
fk02 | 2 | fk_street_streettype | | | | |
fk02att | 1 | streettypeacrm | | streettypeacrm | character(8) | f |
fk02rtbl | 0 | streettype | | | | |
fk02ratt | 1 | streettypeacrm | | streettypeacrm | character(8) | t |
idx01 | 1 | xie1street | | | | |
idx01att | 1 | wcrccode | | wcrccode | smallint | t |
idx01att | 2 | localityid | | localityid | integer | t |
idx01att | 3 | streettypeacrm | | streettypeacrm | character(8) | f |
idx01att | 4 | streetname | | | varchar(150) | t |
idx02 | 2 | xie2street | | | | |
idx02att | 1 | wcrccode | | wcrccode | smallin | t |
idx02att | 2 | localityid | | localityid | integer | t |
idx02att | 3 | streetname | | | varchar(150) | t |
idx03 | 3 | xie3street | | | | |
idx03att | 1 | streetname | | | varchar(150) | t |
idx04 | 4 | xpkstreet | ( ) street | | | |
idx04att | 1 | wcrccode | | wcrccode | smallint | t |
idx04att | 2 | localityid | | localityid | integer | t |
idx04att | 3 | streetid | | streetid | smallint | t |
Siehe auch
Funktionen zum Dokumentieren von PostgreSQL-Datenbanken. ;Funktionen zum Dokumentieren von PostgreSQL-Datenbanken. Teil drei .Funktionen zum Dokumentieren von PostgreSQL-Datenbanken. Das Ende (Teil vier) .