Selama bekerja dengan PostgreSQL, lebih dari seratus fungsi untuk bekerja dengan direktori sistem telah terakumulasi: pg_class, pg_attribute, pg_constraints, dll.
Apa yang harus dilakukan dengan mereka? Mereka digunakan relatif jarang. Sertakan dalam proyek apa pun? Pelanggan Krasnoyarsk tidak akan membayar "omong kosong" seperti itu. Namun, bagaimana jika mereka bermanfaat bagi orang lain selain penulis. Dan dia memutuskan untuk meletakkannya, seperti membaca buku, di lemari umum untuk mereka yang menginginkannya.
Seseorang ingin menggunakannya dalam pekerjaan mereka. Dan seseorang tertarik selain dari pengalaman mereka dengan katalog sistem.
Tetapi agar tidak mengubah publikasi menjadi enumerasi yang membosankan, tidak diketahui mengapa fungsi-fungsi itu dibuat, saya memutuskan untuk memikirkan fungsi-fungsi itu yang bisa disatukan oleh tujuan bersama. Oleh karena itu, fungsi yang digunakan untuk menampilkan daftar karakteristik tabel tabel arbitrer dipilih.
Daftar diperpanjang karakteristik tabel database dikembalikan oleh fungsi
admtf_Table_ComplexFeatures , yang akan disebut fungsi kepala dalam artikel ini. Dengan demikian, artikel akan dibatasi untuk mempertimbangkan fungsi-fungsi yang dipanggil dalam proses mengeksekusi fungsi kepala.
Paruh pertama artikel memberikan komentar tentang implementasi fungsi. Yang kedua adalah kode sumber fungsi. Bagi pembaca yang hanya tertarik pada teks sumber, kami sarankan segera melanjutkan ke
Lampiran .
Lihat juga
Fungsi untuk mendokumentasikan database PostgreSQL. Bagian dua ;
Fungsi untuk mendokumentasikan database PostgreSQL. Bagian tiga .
Fungsi untuk mendokumentasikan database PostgreSQL. Akhir (bagian empat) .
Apa fitur canggih yang sedang kita bicarakan?
Untuk mendapatkan ide tentang apa yang dimaksud dengan karakteristik yang diperluas dari tabel database, kita mulai dengan mempertimbangkan daftar karakteristik berikut. Daftar ini berisi karakteristik tabel database Street yang dikembalikan oleh
admtf_Table_ComplexFeatures ( 'publik' , 'street' ) .
Tabel di bawah ini berisi daftar fitur Street table yang disingkat. Seperangkat karakteristik lengkap dari tabel ini diberikan dalam Bahan Pelengkap Lampiran 2.
Tabel 1. Fitur lanjutan dari tabel Street.

Versi teks dari tabel pada gambarKategori | Tidak. | Judul | Komentar | jenis | Jenis dasar | ? bukan NULL |
---|
tbl | 0 | jalan | Daftar jalan di pemukiman | | | |
att | 1 | kode sandi | Kode negara | kode sandi | smallint | t |
att | 2 | localityid | ID komunitas | localityid | bilangan bulat | t |
att | 3 | streetid | ID jalan desa | streetid | smallint | t |
att | 4 | streettypeacrm | Akronim Jalan | streettypeacrm | karakter (8) | f |
att | 5 | nama jalan | Nama jalan | streettypeacrm | varchar (150) | t |
pk | 0 | xpkstreet | Kunci utama meja jalan | | | |
pkatt | 1 | kode sandi | Kode negara | kode sandi | smallint | t |
fk01 | 1 | fk_street_locality | Meja kunci asing | | | |
fk02 | 2 | fk_street_streettype | Meja kunci asing | | | |
idx01 | 1 | xie1 jalan | Indeks berdasarkan jenis dan nama jalan pemukiman | | | |
idx02 | 2 | xie2jalan | Kode pos | | | |
idx03 | 3 | xie3jalan | Indeks nama jalan semua pemukiman | | | |
idx04 | 4 | xpkstreet | Indeks unik (kunci utama) dari tabel jalan | | | |
Merinci permusuhan pada set huruf dan angka ini, Anda dapat melihat bahwa kita berbicara tentang karakteristik biasa dari tabel database:
- Nama tabel;
- Daftar atribut tabel dan tipenya;
- Kunci utama dan daftar kunci asing tabel, bersama dengan atribut tabel yang menyusunnya
- Daftar indeks tabel.
Keunikan setiap entri dari daftar karakteristik dijamin oleh nilai-nilai bidang "kategori" dan nomor seri ("Tidak.") Dari karakteristik.
Tabel 2. Kategori karakteristik tabel.
Versi teks dari tabel pada gambarAkronim | Janji temu |
---|
tb | Karakteristik tabel |
att | Karakteristik Atribut Tabel |
seq | Karakteristik urutan |
pk | Fitur Utama Utama |
pkAtt | Karakteristik Atribut Kunci Utama |
fk99 | Fitur Utama Asing |
fk99att | Karakteristik Atribut Kunci Asing |
fk99rtbl | Karakteristik tabel direferensikan oleh kunci asing |
fk99ratt | Karakteristik atribut dari tabel yang dirujuk oleh kunci asing |
Idx99 | Karakteristik indeks |
Idx99att | Karakteristik Atribut Indeks |
Inhtbl99 | Karakteristik tabel yang dihasilkan |
Nilai kategori diperlukan untuk membedakan kelompok karakteristik yang berbeda satu sama lain. Nomor seri, untuk membedakan karakteristik dalam grup.
Beberapa kunci asing (KUNCI ASING) dan indeks dapat dideklarasikan dalam tabel database. Oleh karena itu, nilai kategori untuk karakteristik ini dan turunannya berisi nomor seri. Misalnya, entri dengan kunci βKategoriβ = idx02att dan βNo.β = 1 menunjukkan atribut pertama dari indeks ke-2.
Dalam daftar kategori di atas, lokasi nomor seri ditunjukkan sebagai '99'.
Komentar 1

kode sumber operator pada gambarSELECT * FROM admtf_Table_ComplexFeatures('pg_catalog','pg_class');
Artikel ini memberikan contoh karakteristik tabel, yang dijelaskan secara singkat dalam skema tambahan yang dibuat khusus untuk menunjukkan kemampuan fungsi. Tetapi pembaca, setelah membuat fungsi ini atau itu dalam database-nya, dapat menggunakan nama skema dan tabelnya sebagai parameter. Selain itu, misalnya, direktori pg_class dapat digunakan sebagai parameter, meskipun dalam hal ini sejumlah karakteristik dikeluarkan.
Akhir dari komentar itu.
Struktur fungsi kepala
Fig. 1. Fungsi yang menyebabkan fungsi kepala.Tabel 3. Penugasan fungsi.
Versi teks dari tabel pada gambarTidak. | Judul | Janji temu |
---|
1 | admtf_Table_Features | Fungsi mengembalikan daftar karakteristik tabel database |
2 | admtf_Table_Attributes | Fungsi mengembalikan daftar atribut tabel database dan karakteristiknya. |
3 | admtf_Table_Constraintes | Fungsi mengembalikan daftar pembatasan tabel database dan karakteristiknya. |
4 | admtf_Table_Indexes | Fungsi mengembalikan daftar indeks tabel database dan karakteristiknya. |
5 | admtf_Table_InheritanceChildrens | Fungsi mengembalikan daftar tabel yang dihasilkan oleh (IHERITS) dari tabel basis data sumber. |
6 | admtf_Table_Sequences | Fungsi mengembalikan daftar urutan (URUTAN) di mana tabel tergantung. |
7 | admtf_PrimaryKey_ComplexFeatures | Fungsi mengembalikan daftar lengkap (diperluas) karakteristik kunci utama (PRIMARY KEY) dari tabel database. |
8 | admtf_ForeignKey_ComplexFeatures | Fungsi mengembalikan daftar lengkap (diperpanjang) karakteristik kunci asing (KUNCI ASING) dari tabel database. |
9 | admtf_Index_ComplexFeatures | Fungsi mengembalikan daftar lengkap (diperluas) karakteristik indeks tabel database. |
10 | admtf_Table_ComplexFeatures | Fungsi mengembalikan daftar lengkap (diperluas) karakteristik tabel database. |
Komentar 2.
Deskripsi fungsi akan diatur dalam urutan yang ditunjukkan di atas. Alasannya adalah bahwa artikel tersebut harus dibagi menjadi beberapa bagian. Dan fungsi-fungsi yang diatur dalam urutan ini dapat digunakan terlepas dari kenyataan bahwa beberapa di antaranya hanya akan dijelaskan di bagian publikasi berikut.
Akhir dari komentar itu.
Admtf_Table_Features daftar fungsi karakteristik tabel database
Fungsi admtf_Table_Features mengembalikan daftar karakteristik tabel database itu sendiri. Kode sumber dapat dilihat dan diunduh di sini.
Sebagai parameter, fungsi tersebut mengambil nama tabel sumber (a_TableName ) dan nama skema tempat tabel dibuat ( a_SchemaName ).
Fungsi ini mengekstrak data dasar dari entri katalog pg_class , yang berisi, selain entri tabel, juga mencatat tentang urutan, tampilan, tampilan terwujud, dan tipe komposit. Oleh karena itu, untuk memilih tabel, kondisi relkind = 'r' digunakan .
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);
Selain itu, fungsi mengakses data direktori pg_namespace dan pg_description . Yang pertama berisi nama skema database, dan yang kedua berisi komentar pada semua objek database.
Penting untuk memperhatikan kondisi objsubid = 0 . Ini mendefinisikan komentar di atas meja, karena nilai dari bidang objek adalah sama untuk kedua tabel dan atributnya. Komentar pada atribut tabel terdapat dalam entri di mana objsub cocok dengan jumlah atribut ini.
Tabel 4. Hasil dari mengeksekusi fungsi admtf_Table_Features ('public', 'Street').Judul | Komentar | Jumlah atribut | Jumlah Kendala PERIKSA | ? apakah ada kunci utama | ? adalah indeks yang diumumkan | ? apakah ada keturunan | Jumlah entri dalam tabel |
---|
jalan | Daftar jalan di pemukiman | 22 | 0 | t | t | f | 20150 |
Komentar 3
Perhatikan jumlah atribut tabel jalan. Ini berbeda secara signifikan dari jumlah atribut yang ditentukan dalam skema bantu.
Tabel 5. Atribut tambahan dari tabel Street.
attname | atttypid | attnum | Catatan |
---|
cmin | Tanggal 29 | -4 | Atribut sistem |
xmin | 28 | -3 | Atribut sistem |
ctid | 27 | -1 | Atribut sistem |
kode sandi | 795369 | 1 | Atribut yang valid |
localityid | 795352 | 2 | Atribut yang valid |
streetid | 795364 | 3 | Atribut yang valid |
streettypeacrm | 1919168 | 4 | Atribut yang valid |
nama jalan | 1043 | 5 | Atribut yang valid |
........ pg.dropped.6 ........ | 0 | 6 | Atribut jarak jauh |
........ pg.dropped.7 ........ | 0 | 7 | Atribut jarak jauh |
Faktanya adalah bahwa PostgreSQL, selain atribut utama, juga memperhitungkan beberapa atribut sistem, dan bahkan atribut yang dihapus.
Komentar akhir
Function admtf_Table_Attributes daftar atribut tabel database dan karakteristiknya
Fungsi admtf_Table_Attributes mengembalikan daftar atribut tabel database. Kode sumber dapat dilihat dan diunduh di sini.
Sebagai parameter, fungsi tersebut mengambil nama tabel sumber ( a_TableName ) dan nama skema tempat tabel dibuat ( a_SchemaName ).
Fungsi mengambil data utama dari entri direktori pg_attribute dan pg_type . Yang pertama berisi catatan dengan data tentang atribut tabel, tampilan, tampilan terwujud, tipe komposit, dan bahkan fungsi. Yang kedua adalah tentang karakteristik tipe atribut.
Mungkin beberapa klarifikasi diperlukan dengan cara agar pengguna dan tipe dasar didefinisikan dalam fungsi.
Atribut tabel dideklarasikan dengan tipe kustom jika bidang typbasetype lebih besar dari 0 dalam entri direktori pg_type yang sesuai. Jika tidak, atributnya adalah tipe dasar. Oleh karena itu, direktori pg_type terlibat dua kali dalam klausa FROM. Di entri direktori pertama, keberadaan tipe pengguna ditentukan, jika tidak ditentukan ( typbasetype = 0 ), maka nilai tipe dasar dihasilkan dari entri ini. Kalau tidak, tipe dasar ditentukan dari catatan yang btyp.OID = typ.typbasetype.
Secara langsung garis dengan tipe dasar dibentuk menggunakan fungsi katalog sistem FORMAT_TYPE (type_oid, typemod) . Parameter pertama di antaranya adalah tipe dasar catatan OID. Parameter kedua adalah nilai pengubah untuk jenis yang berisi ukuran. Misalnya, VARCHAR (100) atau NUMERIC (4,2), DECIMAL (4,2). Nilai parameter typemod diambil dari typ.typtypmod jika atributnya adalah tipe pengguna, jika tidak dari attr.atttypmod , mis. langsung dari catatan atribut.

kode sumber operator pada gambar 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;
Selain itu, fungsi mengakses data direktori pg_class , pg_namespace dan pg_description . Direktori pertama dan kedua digunakan untuk mencari atribut dengan nama skema dan tabel database.
Direktori ketiga digunakan untuk mengambil komentar untuk atribut tabel.
Komentar pada atribut tabel ada di entri di mana dsc.objoid berisi OID dari tabel sumber, dan dsc.objsubid adalah nomor seri dari atribut dalam tabel, yaitu. attr.attnum .
Untuk mencegah fungsi mengembalikan atribut sistem dan jarak jauh, klausa WHERE menetapkan kondisi attr.attnum> 0 AND attr.atttypID> 0 .
Tabel 6. Hasil menjalankan fungsi admtf_Table_Attributes ('publik', 'Street').Tidak. | Judul | Jenis khusus | Jenis dasar | ? bukan NULL | Komentar |
---|
1 | kode sandi | kode sandi | smallint | t | Kode negara |
2 | localityid | localityid | bilangan bulat | t | ID komunitas |
3 | streetid | streetid | smallint | t | ID jalan desa |
4 | streettypeacrm | streettypeacrm | karakter (8) | f | Akronim Jalan |
5 | nama jalan | | varchar (150) | t | Nama jalan pemukiman |
Versi fungsi menggunakan regclass alias untuk tipe oid
Pengidentifikasi objek PostgreSQL (OID) memiliki tipe yang sama dengan OID, yang saat ini diimplementasikan sebagai integer empat-byte yang tidak ditandatangani. Tetapi karena adanya alias dari tipe ini, integer dapat direpresentasikan sebagai nama objek. Dan sebaliknya - mengonversi nama objek menjadi bilangan bulat dari tipe OID.
Sebagai contoh, lihat pernyataan SELECT berikut. Itu biasa mengambil nama-nama tabel atribut dan nama-nama jenisnya - alih-alih mengakses bidang direktori yang sesuai dengan nama-nama karakteristik ini, mereka digunakan:
- 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;
Berikut ini adalah hasil dari mengeksekusi query ini.

Dalam daftar nilai output dari operator SELECT sebelum konversi menggunakan alias dari tipe OID, semua nilai kecuali nama atribut adalah angka, tetapi sebagai hasilnya, nama tabel dan tipe atribut ditampilkan. Jenis nilai output dapat dipertimbangkan di baris kedua dari header tabel.
Selain itu, dalam klausa WHERE pernyataan, kondisi attr.attrelid = ('public' || '.' || 'Street') :: regclass terletak , di sisi kiri yang merupakan nilai numerik, dan di sebelah kanan adalah string yang dikonversi ke nilai numerik dengan menggunakan alias regclass .

kode sumber operator pada gambar 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;
Menggunakan alias regclass dari pernyataan utama, Anda dapat menghapus koneksi ke dua direktori. Tetapi peningkatan seperti itu hampir tidak berpengaruh pada kinerja fungsi - di kedua versi, fungsi dieksekusi dalam 11 ms. Mungkin karena fakta bahwa tabel tes memiliki beberapa atribut.
Komentar 4Kelemahan serius dalam kondisi dalam bentuk attr.attrelid = (a_SchemaName || '.' || a_TableName) :: regclass dimanifestasikan ketika ada skema dan / atau tabel dengan nama yang tidak biasa dalam database. Misalnya, "Skema saya" dan / atau "Tabel saya" . Nilai-nilai tersebut harus ditransmisikan dalam tanda kutip ganda atau menggunakan fungsi QUOTE_IDENT, jika tidak fungsi tersebut akan gagal dengan kesalahan sistem.

kode sumber operator pada gambar 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;
Oleh karena itu, saya lebih suka menggunakan kondisi dalam bentuk
RENDAH (nspc.nspname) = RENDAH (a_SchemaName) DAN RENDAH (tbl.relname) = RENDAH (a_TableName) , yang tidak menyebabkan kesalahan sistem.
Komentar akhirLAMPIRAN 1. Skrip
Membuat Fungsi admtf_Table_Features
Komentar pada kode sumber fungsi dapat ditemukan di sini.kode sumber fungsi 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;
Membuat Fungsi admtf_Table_Attributes
Komentar pada kode sumber fungsi dapat ditemukan di sini.kode sumber fungsi 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;
Membuat Fungsi admtf_Table_Attributes Menggunakan Regclass Alias
Komentar pada kode sumber fungsi dapat ditemukan di sini.kode sumber fungsi 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;
LAMPIRAN 2. Bahan tambahan
Skema basis data bantu

- NEGARA - Klasifikasi negara di dunia - OKSM (Semua-Rusia klasifikasi negara di dunia);
- HOUSEADDR - Daftar nomor rumah di jalan-jalan pemukiman;
- LCLTYTYPE - Direktori jenis permukiman;
- LOKALITAS - Daftar pemukiman;
- STREET β ;
- STREETTYPE β ;
- TERRITORY β (, , , ..);
- TERRITORYTYPE β .
Street ()
.1. Street ().
Kategori | Tidak. | Judul | Komentar | jenis | Jenis dasar | ? bukan NULL |
---|
tbl | 0 | jalan | Daftar jalan di pemukiman | | | |
att | 1 | kode sandi | Kode negara | kode sandi | smallint | t |
att | 2 | localityid | ID komunitas | localityid | bilangan bulat | t |
att | 3 | streetid | ID jalan desa | streetid | smallint | t |
att | 4 | streettypeacrm | Akronim Jalan | streettypeacrm | karakter (8) | f |
att | 5 | nama jalan | Nama jalan | streettypeacrm | varchar (150) | t |
pk | 0 | xpkstreet | Kunci utama meja jalan | | | |
pkatt | 1 | kode sandi | Kode negara | kode sandi | smallint | t |
pkatt | 2 | localityid | ID komunitas | localityid | bilangan bulat | t |
pkatt | 3 | streetid | ID jalan desa | streetid | smallint | t |
fk01 | 1 | fk_street_locality | Meja kunci asing | | | |
fk01att | 1 | kode sandi | Kode negara | kode sandi | smallint | t |
fk01att | 2 | localityid | ID komunitas | localityid | bilangan bulat | 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 |
Fungsi untuk mendokumentasikan database PostgreSQL. ;Fungsi untuk mendokumentasikan database PostgreSQL. Bagian tiga .Fungsi untuk mendokumentasikan database PostgreSQL. Akhir (bagian empat) .