PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпред рдПрдХ рднрд╛рдЧ

PostgreSQL рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди, рд╕рд┐рд╕реНрдЯрдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реМ рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдп рдЬрдорд╛ рд╣реЛ рдЧрдП рд╣реИрдВ: pg_class, pg_attribute, pg_constraints, рдЖрджрд┐ред


рдЙрдирдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ? рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХрдо рд╣реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ? рдХреНрд░рд╛рд╕реНрдиреЛрдпрд╛рд░реНрд╕реНрдХ рдЧреНрд░рд╛рд╣рдХ рдРрд╕реЗ "рдмрдХрд╡рд╛рд╕" рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдФрд░ рдлрд┐рд░ рднреА, рдЕрдЧрд░ рд╡реЗ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд▓реЗрдЦрдХред рдФрд░ рдЙрд╕рдиреЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЕрд▓рдорд╛рд░реА рдореЗрдВ, рдХрд┐рддрд╛рдмреЗрдВ рдкрдврд╝рдиреЗ рдХреА рддрд░рд╣ рдЙрдиреНрд╣реЗрдВ рд░рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рдХреЛрдИ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рдФрд░ рдХрд┐рд╕реА рдХреЛ рд╕рд┐рд╕реНрдЯрдо рдХреИрдЯрд▓реЙрдЧ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИред

рд▓реЗрдХрд┐рди рдкреНрд░рдХрд╛рд╢рди рдХреЛ рдПрдХ рдЙрдмрд╛рдК рдЧрдгрдирд╛ рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреНрдпреЛрдВ рдмрдирд╛рдП рдЧрдП рдереЗ, рдореИрдВрдиреЗ рдЙрдирдореЗрдВ рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЬреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд▓рдХреНрд╖реНрдп рджреНрд╡рд╛рд░рд╛ рдПрдХрдЬреБрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдХрд╛рд░реНрдп рдЬреЛ рдПрдХ рдордирдорд╛рдиреА рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╕реВрдЪреА рдХреЛ adtf_Table_ComplexFeatures рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд▓реЗрдЦ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рддрдХ рд╕реАрдорд┐рдд рд╣реЛрдЧрд╛ рдЬреЛ рд╕рд┐рд░ рд╕рдорд╛рд░реЛрд╣ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рд▓реЗрдЦ рдХреА рдкрд╣рд▓реА рдЫрдорд╛рд╣реА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рджреВрд╕рд░рд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рд╣реИред рдЙрди рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреЗрд╡рд▓ рд╕реНрд░реЛрдд рдЧреНрд░рдВрдереЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рд╣рдо рддреБрд░рдВрдд рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВред

рдпрд╣ рднреА рджреЗрдЦреЗрдВ
PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпред рднрд╛рдЧ рджреЛ ;
PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпред рднрд╛рдЧ рддреАрди
PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпред рдЕрдВрдд (рднрд╛рдЧ рдЪрд╛рд░) ред




рд╣рдо рдХрд┐рди рдЙрдиреНрдирдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ?


рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╕реЗ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рдЗрд╕рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рд╕реНрдЯреНрд░реАрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╣реИрдВ, рдЬреЛ Adtf_Table_ComplexFeatures ( 'рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ' , 'рд╕рдбрд╝рдХ' ) рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛ рджреА рдЧрдИ рд╣реИрдВред

рдиреАрдЪреЗ рджреА рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕реНрдЯреНрд░реАрдЯ рдЯреЗрдмрд▓ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕реВрдЪреА рд╣реИред рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕реЗрдЯ рдкрд░рд┐рд╢рд┐рд╖реНрдЯ 2 рдХреЗ рдкреВрд░рдХ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рддрд╛рд▓рд┐рдХрд╛ 1. рд╕реНрдЯреНрд░реАрдЯ рдЯреЗрдмрд▓ рдХреА рдЙрдиреНрдирдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВред

рдЖрдХреГрддрд┐ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдкрд╛рда рд╕рдВрд╕реНрдХрд░рдг
рд╢реНрд░реЗрдгреАрд╕рдВрдЦреНрдпрд╛рдирд╛рдордЯрд┐рдкреНрдкрдгреАрдЯрд╛рдЗрдкрдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░? рдкреВрд░реНрдг рдирд╣реАрдВ
tbl0рд╕рдбрд╝рдХрдмрд╕реНрддрд┐рдпреЛрдВ рдореЗрдВ рд╕рдбрд╝рдХреЛрдВ рдХреА рд╕реВрдЪреА
att1wcrccodeрджреЗрд╢ рдХрд╛ рдХреЛрдбwcrccodeSMALLINTрдЯреА
att2localityidрд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдЖрдИрдбреАlocalityidрдкреВрд░реНрдгрд╛рдВрдХрдЯреА
att3streetidрдЧрд╛рдБрд╡ рдХреА рдЖрдИрдбреА рдЧрд▓реАstreetidSMALLINTрдЯреА
att4streettypeacrmрд╕рдбрд╝рдХ рдХрд╛ рдХрд┐рдирд╛рд░рд╛streettypeacrmрдЪрд░рд┐рддреНрд░ (8)рдЪ
att5streetnameрдЧрд▓реА рдХрд╛ рдирд╛рдоstreettypeacrmрд╡рд░реНрдЪрд░ (150)рдЯреА
pk0xpkstreetрд╕рдбрд╝рдХ рдХреА рдореЗрдЬ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА
pkatt1wcrccodeрджреЗрд╢ рдХрд╛ рдХреЛрдбwcrccodeSMALLINTрдЯреА
fk011fk_street_localityрдЯреЗрдмрд▓ рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА
fk022fk_street_streettypeрдЯреЗрдмрд▓ рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА
idx011xie1streetрдмрд╕реНрддреА рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕рдбрд╝рдХ рдХреЗ рдирд╛рдо рд╕реЗ рд╕реВрдЪрдХрд╛рдВрдХ
idx022xie2streetрдЬрд╝рд┐рдк рдХреЛрдб
idx033xie3streetрд╕рднреА рдмрд╕реНрддрд┐рдпреЛрдВ рдХреЗ рд╕рдбрд╝рдХ рдХреЗ рдирд╛рдо рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ
idx044xpkstreetрд╕рдбрд╝рдХ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЕрджреНрд╡рд┐рддреАрдп (рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА) рд╕реВрдЪрдХрд╛рдВрдХ


рдЕрдХреНрд╖рд░реЛрдВ рдФрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдЗрд╕ рд╕рдореВрд╣ рдореЗрдВ рд╢рддреНрд░реБрддрд╛ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ:


  • рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдирд╛рдо;
  • рддрд╛рд▓рд┐рдХрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╕реВрдЪреА;
  • рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА, рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реА рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде;
  • рдЯреЗрдмрд▓ рдЗрдВрдбреЗрдХреНрд╕ рдХреА рдПрдХ рд╕реВрдЪреАред

рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ "рд╢реНрд░реЗрдгреА" рдлрд╝реАрд▓реНрдб рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ ("рд╕рдВрдЦреНрдпрд╛") рдХреЗ рдореВрд▓реНрдпреЛрдВ рд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрддреА рд╣реИред



рддрд╛рд▓рд┐рдХрд╛ 2. рддрд╛рд▓рд┐рдХрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╢реНрд░реЗрдгрд┐рдпрд╛рдВред

рдЖрдХреГрддрд┐ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдкрд╛рда рд╕рдВрд╕реНрдХрд░рдг
рдкрд░рд┐рд╡рд░реНрдгреА рд╢рдмреНрджрдирд┐рдпреБрдХреНрддрд┐
рдЯреАрдмреАрддрд╛рд▓рд┐рдХрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ
attрддрд╛рд▓рд┐рдХрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ
seqрдЕрдиреБрдХреНрд░рдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ
pkрдкреНрд░рд╛рдердорд┐рдХ рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
pkAttрдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛
fk99рд╡рд┐рджреЗрд╢реА рдкреНрд░рдореБрдЦ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
fk99attрд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛
fk99rtblрд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рдХреНрд╖рдг
fk99rattрд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ
Idx99рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд▓рдХреНрд╖рдг
Idx99attрд╕реВрдЪрдХрд╛рдВрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛
Inhtbl99рдЙрддреНрдкрдиреНрди рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рдХреНрд╖рдг


рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдореВрд╣реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реНрд░реЗрдгреА рдореВрд▓реНрдп рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдПрдХ рдХреНрд░рдорд╛рдВрдХ рд╕рдВрдЦреНрдпрд╛, рд╕рдореВрд╣ рдХреЗ рднреАрддрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рднреЗрджрдиреЗ рдХреЗ рд▓рд┐рдПред


рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХрдИ рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬрд┐рдпрд╛рдБ (FOREIGN KEY) рдФрд░ рдЗрдВрдбреЗрдХреНрд╕ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдЙрдирдХреЗ рд╡рдВрд╢ рдХреЗ рд▓рд┐рдП рд╢реНрд░реЗрдгреА рдореВрд▓реНрдп рдореЗрдВ рдПрдХ рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдВрдЬреА "рд╢реНрд░реЗрдгреА" = idx02att рдФрд░ "рдирдВрдмрд░" = 1 рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ 2 рд╕реВрдЪрдХрд╛рдВрдХ рдХреА рдкрд╣рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред


рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреА рдЙрдкрд░реЛрдХреНрдд рд╕реВрдЪреА рдореЗрдВ, рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ рдХрд╛ рд╕реНрдерд╛рди '99' рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рдЯрд┐рдкреНрдкрдгреА 1



рдЖрдХреГрддрд┐ рдореЗрдВ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб
SELECT * FROM admtf_Table_ComplexFeatures('pg_catalog','pg_class'); 



рд▓реЗрдЦ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рдПрдХ рд╕рд╣рд╛рдпрдХ рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкрд╛рдардХ, рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЗрд╕ рдпрд╛ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрдирд╛рддреЗ рд╣реБрдП, рдЕрдкрдиреА рдпреЛрдЬрдирд╛рдУрдВ рдФрд░ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдирд╛рдо рдХреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, pg_class рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рдЕрдВрддред



рд╕рд┐рд░ рд╕рдорд╛рд░реЛрд╣ рд╕рдВрд░рдЪрдирд╛



рдЕрдВрдЬреАрд░ред 1. рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рд╕рд┐рд░ рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рдХрд╛рд░рдг рдмрдирддреЗ рд╣реИрдВред

рддрд╛рд▓рд┐рдХрд╛ 3. рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯред

рдЖрдХреГрддрд┐ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдкрд╛рда рд╕рдВрд╕реНрдХрд░рдг
рд╕рдВрдЦреНрдпрд╛рдирд╛рдордирд┐рдпреБрдХреНрддрд┐
1admtf_Table_Featuresрдлрд╝рдВрдХреНрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИ
2admtf_Table_Attributesрдлрд╝рдВрдХреНрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдЙрдирдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИред
3admtf_Table_Constraintesрдлрд╝рдВрдХреНрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдФрд░ рдЙрдирдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИред
4admtf_Table_Indexesрдлрд╝рдВрдХреНрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рдЯреЗрдмрд▓ рдЗрдВрдбреЗрдХреНрд╕ рдФрд░ рдЙрдирдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИред
5admtf_Table_InheritanceChildrensрдлрд╝рдВрдХреНрд╢рди рд╕реНрд░реЛрдд рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ (IHERITS) рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИред
6admtf_Table_Sequencesрдлрд╝рдВрдХреНрд╢рди рдЕрдиреБрдХреНрд░рдореЛрдВ (рдЕрдиреБрдХреНрд░рдо) рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рддрд╛рд▓рд┐рдХрд╛ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред
7admtf_PrimaryKey_ComplexFeaturesрдлрд╝рдВрдХреНрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреА рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ (рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА) рдХреА рдПрдХ рдкреВрд░реНрдг (рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд) рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИред
8admtf_ForeignKey_ComplexFeaturesрдлрд╝рдВрдХреНрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╡рд┐рджреЗрд╢реА рдкреНрд░рдореБрдЦ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ (FOREIGN KEY) рдХреА рдкреВрд░реНрдг (рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд) рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИред
9admtf_Index_ComplexFeaturesрдлрд╝рдВрдХреНрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдкреВрд░реНрдг (рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд) рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИред
10admtf_Table_ComplexFeaturesрдлрд╝рдВрдХреНрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рдкреВрд░реНрдг (рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд) рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИред


рдЯрд┐рдкреНрдкрдгреА 2ред


рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХреНрд░рдо рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рд╡рд┐рд╡рд░рдг рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреА рдЬрд╛рдПрдЧреАред рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд▓реЗрдЦ рдХреЛ рдХрдИ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдЗрд╕ рдХреНрд░рдо рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рддрдереНрдп рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЗрд╡рд▓ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред


рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рдЕрдВрддред



рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА Admtf_Table_Features рдлрд╝рдВрдХреНрд╢рди рд╕реВрдЪреА




Adtf_Table_Features рдлрд╝рдВрдХреНрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИред рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рд╕реНрд░реЛрдд рддрд╛рд▓рд┐рдХрд╛ (a_TableName ) рдФрд░ рдЙрд╕ рдпреЛрдЬрдирд╛ рдХрд╛ рдирд╛рдо рд▓реЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рднреАрддрд░ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ ( a_SchemaName )ред


рдлрд╝рдВрдХреНрд╢рди pg_class рдХреИрдЯрд▓реЙрдЧ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╕реЗ рдореБрдЦреНрдп рдбреЗрдЯрд╛ рдХреЛ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдиреБрдХреНрд░рдореЛрдВ, рд╡рд┐рдЪрд╛рд░реЛрдВ, рднреМрддрд┐рдХ рд╡рд┐рдЪрд╛рд░реЛрдВ рдФрд░ рд╕рдордЧреНрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд░рд┐рдХреЙрд░реНрдб рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рд╛рд▓рдд relkind = 'r' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред



 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); 

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдлрд╝рдВрдХреНрд╢рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдбреЗрдЯрд╛ pg_namespace рдФрд░ pg_description рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ ред рдкрд╣рд▓реЗ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХреАрдорд╛ рдХрд╛ рдирд╛рдо рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ рд╕рднреА рдбреЗрдЯрд╛рдмреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВред


рдпрд╣ рд╢рд░реНрдд objsubid = 0 рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдпрд╣ рддрд╛рд▓рд┐рдХрд╛ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдСрдмрдЬреЙрдЗрдб рдлрд╝реАрд▓реНрдб рдХрд╛ рдореВрд▓реНрдп рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рдЗрд╕рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИред рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдЙрд╕ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдЬрд┐рд╕рдореЗрдВ objsubid рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред



рддрд╛рд▓рд┐рдХрд╛ 4. рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо adtf_Table_Features ('рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ', 'рд╕реНрдЯреНрд░реАрдЯ')ред

рдирд╛рдордЯрд┐рдкреНрдкрдгреАрд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛CHECK рдмрд╛рдзрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛? рд╡рд╣рд╛рдБ рдПрдХ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рд╣реИ? рдЕрдиреБрдХреНрд░рдорд┐рдд рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдХреЛрдИ рд╡рдВрд╢рдЬ рд╣реИрдВрддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛
рд╕рдбрд╝рдХрдмрд╕реНрддрд┐рдпреЛрдВ рдореЗрдВ рд╕рдбрд╝рдХреЛрдВ рдХреА рд╕реВрдЪреА220рдЯреАрдЯреАрдЪ20150

рдЯрд┐рдкреНрдкрдгреА 3


рд╕рдбрд╝рдХ рдХреА рддрд╛рд▓рд┐рдХрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдпрд╣ рд╕рд╣рд╛рдпрдХ рд╕реНрдХреАрдорд╛ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдХрд╛рдлреА рднрд┐рдиреНрди рд╣реИред


рддрд╛рд▓рд┐рдХрд╛ 5. рд╕рдбрд╝рдХ рддрд╛рд▓рд┐рдХрд╛ рдХреА рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБред


attnameatttypidattnumрдЯрд┐рдкреНрдкрдгреА
Cmin29-4рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛
xmin28-3рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛
ctid27-1рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛
wcrccode795,3691рдорд╛рдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛
localityid795,3522рдорд╛рдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛
streetid795,3643рдорд╛рдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛
streettypeacrm19191684рдорд╛рдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛
streetname10435рдорд╛рдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛
........ pg.dropped.6 ........06рджреВрд░рд╕реНрде рд╡рд┐рд╢реЗрд╖рддрд╛
........ pg.dropped.7 ........07рджреВрд░рд╕реНрде рд╡рд┐рд╢реЗрд╖рддрд╛

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ PostgreSQL, рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдИ рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╣рдЯрд╛рдП рдЧрдП рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рднреА рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред


рдЯрд┐рдкреНрдкрдгреА рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ



рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдЙрдирдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕реВрдЪреА admtf_Table_Attributes рд╕реВрдЪреА


Adtf_Table_Attributes рдлрд╝рдВрдХреНрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИред рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рд╕реНрд░реЛрдд рддрд╛рд▓рд┐рдХрд╛ ( a_TableName ) рдФрд░ рдЙрд╕ рдпреЛрдЬрдирд╛ рдХрд╛ рдирд╛рдо рд▓реЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рднреАрддрд░ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ ( a_SchemaName )ред


рдлрд╝рдВрдХреНрд╢рди pg_attribute рдФрд░ pg_type рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рд╕реЗ рдореБрдЦреНрдп рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛рдУрдВ, рд╡рд┐рдЪрд╛рд░реЛрдВ, рднреМрддрд┐рдХ рд╡рд┐рдЪрд╛рд░реЛрдВ, рд╕рдордЧреНрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд░рд┐рдХреЙрд░реНрдб рд╣реИрдВред рджреВрд╕рд░рд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред


рд╢рд╛рдпрдж рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рддрд░реАрдХреЗ рд╕реЗ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред


рддрд╛рд▓рд┐рдХрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЯрд╛рдЗрдкрдмреАрд╕реЗрдЯрд╛рдЗрдк рдлрд╝реАрд▓реНрдб рд╕рдВрдмрдВрдзрд┐рдд pg_ypeype рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдореЗрдВ 0 рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред рдЕрдиреНрдпрдерд╛, рд╡рд┐рд╢реЗрд╖рддрд╛ рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХреА рд╣реИред рдЗрд╕рд▓рд┐рдП, pg_type рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ FROM рдХреНрд▓реЙрдЬрд╝ рдореЗрдВ рджреЛ рдмрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИред рдкрд╣рд▓реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдореЗрдВ, рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХрд╛рд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдпрджрд┐ рдЗрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ( рдЯрд╛рдЗрдкрдмреИрд╕реЗрдЯрд╛рдЗрдк = 0 ), рддреЛ рдЗрд╕ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╕реЗ рдПрдХ рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░ рдорд╛рди рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░ рд░рд┐рдХреЙрд░реНрдб рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП btyp.OID = typ.typbasetypeред


рд╕реАрдзреЗ рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рд╕рд┐рд╕реНрдЯрдо рдХреИрдЯрд▓реЙрдЧ FORMAT_TYPE (type_oid, typemod) рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдИ рдЧрдИ рд╣реИред рдЬрд┐рд╕рдХрд╛ рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░ OID рд░рд┐рдХреЙрд░реНрдб рд╣реИред рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЙрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрдХ рдорд╛рди рд╣реИ рдЬрд┐рдирдореЗрдВ рдПрдХ рдЖрдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, VARCHAR (100) рдпрд╛ NUMERIC (4,2), DECIMAL (4,2)ред рдЯрд╛рдЗрдкрдореЙрдб рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдорд╛рди рдЯрд╛рдЗрдк.рдЯрд╛рдЗрдкреНрдЯрдореЛрдб рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХрд╛рд░ рдХреА рд╣реИ, рдЕрдиреНрдпрдерд╛ attr.atttypmod рд╕реЗ , рдЕрд░реНрдерд╛рдд рд╕реАрдзреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд░рд┐рдХреЙрд░реНрдб рд╕реЗред



рдЖрдХреГрддрд┐ рдореЗрдВ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб
 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; 


рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдлрд╝рдВрдХреНрд╢рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдбреЗрдЯрд╛ pg_class , pg_namespace рдФрд░ pg_description рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ ред рд╕реНрдХреАрдорд╛ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдирд╛рдо рд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реА рдФрд░ рджреВрд╕рд░реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рддрд╛рд▓рд┐рдХрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрд╕рд░реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдЙрд╕ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдореЗрдВ рд╣реИ рдЬрд┐рд╕рдореЗрдВ dsc.objoid рдореЗрдВ рд╕реНрд░реЛрдд рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ OID рд╕рдорд╛рд╣рд┐рдд рд╣реИ, рдФрд░ dsc.objsubid рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд attr.attnum ред


рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓реМрдЯрдиреЗ рдХреА рдкреНрд░рдгрд╛рд▓реА рдФрд░ рджреВрд░рд╕реНрде рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, WHERE рдХреНрд▓реЙрдЬрд╝ рдиреЗ рд╕реНрдерд┐рддрд┐ attr.attnum> 0 рдФрд░ attr.atttypID> 0 рд╕реЗрдЯ рдХреА рд╣реИред



рддрд╛рд▓рд┐рдХрд╛ 6. рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо adtf_Table_Attributes ('рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ', 'рд╕реНрдЯреНрд░реАрдЯ')ред

рд╕рдВрдЦреНрдпрд╛рдирд╛рдордХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░? рдкреВрд░реНрдг рдирд╣реАрдВрдЯрд┐рдкреНрдкрдгреА
1wcrccodewcrccodeSMALLINTрдЯреАрджреЗрд╢ рдХрд╛ рдХреЛрдб
2localityidlocalityidрдкреВрд░реНрдгрд╛рдВрдХрдЯреАрд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдЖрдИрдбреА
3streetidstreetidSMALLINTрдЯреАрдЧрд╛рдБрд╡ рдХреА рдЖрдИрдбреА рдЧрд▓реА
4streettypeacrmstreettypeacrmрдЪрд░рд┐рддреНрд░ (8)рдЪрд╕рдбрд╝рдХ рдХрд╛ рдХрд┐рдирд╛рд░рд╛
5streetnameрд╡рд░реНрдЪрд░ (150)рдЯреАрдмрд╕реНрддреА рдХреА рдЧрд▓реА рдХрд╛ рдирд╛рдо

рдЯрд╛рдЗрдк рдУрдб рдХреЗ рд▓рд┐рдП рд░реЗрдЧрдХреНрд▓рд╛рд╕ рдЙрд░реНрдл тАЛтАЛрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрдВрдХреНрд╢рди рд╕рдВрд╕реНрдХрд░рдг


PostgreSQL рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╝рд╛рдпрд░ (OID) OID рдХреЗ рд╕рдорд╛рди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЪрд╛рд░-рдмрд╛рдЗрдЯ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдирд╛рдореЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдХрд╛рд░рдг, рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд - рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╛рдо рдХреЛ OID рдХреЗ рдкреВрд░реНрдгрд╛рдВрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВред


рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрдпрди рдХрдерди рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЛ рдЕрд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ - рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдзрд┐рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдлрд╝реАрд▓реНрдб рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

  • рдПрдЯреНрд░реЗрд▓рд┐рдб :: рд░рд┐рдХреНрд▓рд╛рд╕рд╕ (рдПрдЯреНрд░реЗрд▓рд┐рдб :: рд░рд┐рдЧреНрд▓реИрд╕: 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; 

рдЗрд╕ рдХреНрд╡реЗрд░реА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИред



OID рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ SELECT рдСрдкрд░реЗрдЯрд░ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдорд╛рдиреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ, рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдо рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдорд╛рди рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рддрд╛рд▓рд┐рдХрд╛ рдирд╛рдо рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рдХрд╛рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдЖрдЙрдЯрдкреБрдЯ рдорд╛рди рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рддрд╛рд▓рд┐рдХрд╛ рд╢реАрд░реНрд╖ рд▓реЗрдЦ рдХреА рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдерди рдХреЗ WHERE рдХреНрд▓реЙрдЬ рдореЗрдВ, рд╕реНрдерд┐рддрд┐ attr.attrelid = ('public' ''ред '' 'Street') :: regclass рд╕реНрдерд┐рдд рд╣реИ , рдЬрд┐рд╕рдХреЗ рдмрд╛рдИрдВ рдУрд░ рдПрдХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рд╣реИ, рдФрд░ рджрд╛рдИрдВ рдУрд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдЬрд┐рд╕реЗ рдПрдХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рдХреЗ рд╕рд╛рде рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ || рдЙрдкрдирд╛рдо рд░рд┐рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред



рдЖрдХреГрддрд┐ рдореЗрдВ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб
 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; 


рдореБрдЦреНрдп рдмрдпрд╛рди рд╕реЗ рдЙрдкрдирд╛рдо рд░рд┐рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рджреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реБрдзрд╛рд░ рдХрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рд▓рдЧрднрдЧ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдкрдбрд╝рд╛ - рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдХреЛ 11 рдПрдордПрд╕ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдкрд░реАрдХреНрд╖рдг рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред
рдЯрд┐рдкреНрдкрдгреА рек

рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдПрдХ рдЧрдВрднреАрд░ рджреЛрд╖ рдХреЗ рд░реВрдк рдореЗрдВ attr.attrelid = (a_SchemaName || '||' || a_TableName) :: regclass рддрдм рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдЕрд╕рд╛рдорд╛рдиреНрдп рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдХреАрдорд╛ рдФрд░ / рдпрд╛ рддрд╛рд▓рд┐рдХрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рдореЗрд░рд╛ рд╕реНрдХреАрдорд╛" рдФрд░ / рдпрд╛ "рдореЗрд░рд╛ рдЯреЗрдмрд▓" ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ QUOTE_IDENT рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рд╕рд┐рд╕реНрдЯрдо рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред



рдЖрдХреГрддрд┐ рдореЗрдВ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб
 /*       ┬л   ┬╗*/ 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; 


рдЗрд╕рд▓рд┐рдП, рдореИрдВ LOWER (nspc.nspname) = LOWER (a_SchemaName) рдФрд░ LOWER (tbl.relname) = LOWER (a_TableName) рдХреЗ рд░реВрдк рдореЗрдВ рд╢рд░реНрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ , рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЬрдиреНрдо рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред

рдЯрд┐рдкреНрдкрдгреА рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ

рдкрд░рд┐рд╢рд┐рд╖реНрдЯ 1. рд▓рд┐рдкрд┐рдпреЛрдВ


Adtf_Table_Features рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдирд╛


рдлрд╝рдВрдХреНрд╢рди рд╕реНрд░реЛрдд рдХреЛрдб рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред
рдлрд╝рдВрдХреНрд╢рди рд╕реНрд░реЛрдд рдХреЛрдб
 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; /*     */ --****************************************************************************************************** BEGIN SELECT INTO rs_TableName,rs_TableDescription,rs_NumberOfAttribute, rs_NumberOfChecks,rs_hasPKey,rs_hasIndex,rs_hasSubClass, rs_NumberOfRow 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 nspc.nspname=LOWER(a_SchemaName) AND tbl.relkind=c_TableKind AND tbl.relname =LOWER(a_TableName); EXECUTE 'SELECT count(*) FROM ' ||LOWER(a_SchemaName) ||'.'||quote_ident(LOWER(a_TableName)) INTO v_TableNumberOfRowCalc; RETURN QUERY SELECT rs_TableName,rs_TableDescription,rs_NumberOfAttribute, rs_NumberOfChecks,rs_hasPKey,rs_hasIndex, rs_hasSubClass,v_TableNumberOfRowCalc AS rs_NumberOfRow; END $BODY$ LANGUAGE plpgsql; COMMENT ON FUNCTION admtf_Table_Features(a_SchemaName NAME,a_TableName NAME) IS '   ,  '; --ROLLBACK TRANSACTION; COMMIT TRANSACTION; BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admtf_Table_Features (a_SchemaName VARCHAR(256),a_TableName VARCHAR(256)); /********************************************************************************************************/ /*     ,   */ /********************************************************************************************************/ CREATE OR REPLACE FUNCTION admtf_Table_Features (a_SchemaName VARCHAR(256) default 'public', /*     */ a_TableName VARCHAR(256) default NULL /*   */ ) RETURNS TABLE (rs_TableName VARCHAR(256),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 VARCHAR(256); /*   */ v_TableDescription TEXT; /*   */ v_TableNumberOfRowCalc INTEGER; /*     */ --****************************************************************************************************** BEGIN RETURN QUERY SELECT tf.rs_TableName::VARCHAR(256), tf.rs_TableDescription::TEXT, tf.rs_NumberOfAttribute::INTEGER, tf.rs_NumberOfChecks::INTEGER, tf.rs_hasPKey::BOOLEAN, tf.rs_hasIndex::BOOLEAN, tf.rs_hasSubClass::BOOLEAN, tf.rs_NumberOfRow::INTEGER FROM admtf_Table_Features(a_SchemaName::NAME,a_TableName::NAME) tf; END $BODY$ LANGUAGE plpgsql; COMMENT ON FUNCTION admtf_Table_Features(a_SchemaName VARCHAR(256),a_TableName VARCHAR(256)) IS '   ,  '; --ROLLBACK TRANSACTION; COMMIT TRANSACTION; SELECt * FROM admtf_Table_Features('public'::VARCHAR(256),'Street'::VARCHAR(256)); SELECt * FROM admtf_Table_Features('public':: NAME,'Street'::NAME); 



Adtf_Table_Attributes рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдирд╛


рдлрд╝рдВрдХреНрд╢рди рд╕реНрд░реЛрдд рдХреЛрдб рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред
рдлрд╝рдВрдХреНрд╢рди рд╕реНрд░реЛрдд рдХреЛрдб
 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; /*   */ --****************************************************************************************************** BEGIN RETURN QUERY SELECT attr.attnum AS r_AttributeNumber, attr.attname::NAME AS r_AttributeName, CASE WHEN COALESCE(typ.typbasetype,0)>0 THEN typ.typname::NAME ELSE ''::NAME END AS r_UserTypeName, FORMAT_TYPE(COALESCE(NULLIF(typ.typbasetype,0),typ.oid), COALESCE(NULLIF(typ.typtypmod,-1),attr.atttypmod))::NAME AS r_TypeName, attr.attnotnull AS r_isNotNULL, dsc.description AS r_Description FROM pg_attribute attr INNER JOIN pg_class tbl ON tbl.oid = attr.attrelid INNER JOIN pg_namespace nsp ON tbl.relnamespace=nsp.oid LEFT OUTER JOIN pg_type typ ON attr.atttypid=typ.oid LEFT OUTER JOIN pg_type btyp ON typ.typbasetype=btyp.oid LEFT OUTER JOIN pg_description dsc ON dsc.objoid=attr.attrelid AND dsc.objsubid=attr.attnum WHERE LOWER(nsp.nspname)=LOWER(a_SchemaName) AND LOWER(tbl.relname)=LOWER(a_TableName) AND tbl.relkind=c_TableKind AND attr.attnum>0 AND attr.atttypID>0 ORDER BY tbl.relname,attr.attnum; RETURN; END $BODY$ LANGUAGE plpgsql; COMMENT ON FUNCTION admtf_Table_Attributes(a_SchemaName NAME,a_TableName NAME) IS '   '; --ROLLBACK TRANSACTION; COMMIT TRANSACTION; BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admtf_Table_Attributes (a_SchemaName VARCHAR(256),a_TableName VARCHAR(256)); /********************************************************************************************************/ /*      */ /********************************************************************************************************/ CREATE OR REPLACE FUNCTION admtf_Table_Attributes (a_SchemaName VARCHAR(256) default 'public', /*     */ a_TableName VARCHAR(256) default NULL /*   */ ) RETURNS TABLE (r_AttributeNumber SMALLINT,r_AttributeName VARCHAR(256),r_UserTypeName VARCHAR(256),r_TypeName VARCHAR(256),r_isNotNULL BOOLEAN, r_Description Text) AS $BODY$ DECLARE c_TableKind CONSTANT CHAR:='r'; v_Scale INTEGER; /*   */ --****************************************************************************************************** BEGIN RETURN QUERY SELECT ta.r_AttributeNumber::SMALLINT, ta.r_AttributeName::VARCHAR(256), ta.r_UserTypeName::VARCHAR(256), ta.r_TypeName::VARCHAR(256), ta.r_isNotNULL::BOOLEAN, ta.r_Description::TEXT FROM admtf_Table_Attributes(a_SchemaName::NAME,a_TableName::NAME) ta; RETURN; END $BODY$ LANGUAGE plpgsql; COMMENT ON FUNCTION admtf_Table_Attributes(a_SchemaName VARCHAR(256),a_TableName VARCHAR(256)) IS '   '; --ROLLBACK TRANSACTION; COMMIT TRANSACTION; SELECT * FROM admtf_Table_Attributes('public'::VARCHAR(256),'Street'::VARCHAR(256)); SELECT * FROM admtf_Table_Attributes('public'::NAME,'Street'::NAME); 


Regclass рдЙрдкрдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Adtf_Table_Attributes рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдирд╛


рдлрд╝рдВрдХреНрд╢рди рд╕реНрд░реЛрдд рдХреЛрдб рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред
рдлрд╝рдВрдХреНрд╢рди рд╕реНрд░реЛрдд рдХреЛрдб
 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; /*   */ --****************************************************************************************************** BEGIN RETURN QUERY SELECT attr.attnum AS r_AttributeNumber, attr.attname::NAME AS r_AttributeName, CASE WHEN COALESCE(typ.typbasetype,0)>0 THEN typ.typname::NAME ELSE ''::NAME END AS r_UserTypeName, FORMAT_TYPE(COALESCE(NULLIF(typ.typbasetype,0),typ.oid), COALESCE(NULLIF(typ.typtypmod,-1),attr.atttypmod))::NAME AS r_TypeName, attr.attnotnull AS r_isNotNULL, dsc.description AS r_Description FROM pg_attribute attr INNER JOIN pg_type typ ON attr.atttypid=typ.oid LEFT OUTER JOIN pg_type btyp ON typ.typbasetype=btyp.oid LEFT OUTER JOIN pg_description dsc ON dsc.objoid=attr.attrelid AND dsc.objsubid=attr.attnum WHERE attr.attrelid=(LOWER(a_SchemaName)||'.'|| LOWER(a_TableName))::regclass AND attr.attnum>0 AND attr.atttypID>0 ORDER BY attr.attnum; RETURN; END $BODY$ LANGUAGE plpgsql; COMMENT ON FUNCTION admtf_Table_Attributes(a_SchemaName NAME,a_TableName NAME) IS '   '; --ROLLBACK TRANSACTION; COMMIT TRANSACTION; BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admtf_Table_Attributes (a_SchemaName VARCHAR(256),a_TableName VARCHAR(256)); /********************************************************************************************************/ /*      */ /********************************************************************************************************/ CREATE OR REPLACE FUNCTION admtf_Table_Attributes (a_SchemaName VARCHAR(256) default 'public', /*     */ a_TableName VARCHAR(256) default NULL /*   */ ) RETURNS TABLE (r_AttributeNumber SMALLINT,r_AttributeName VARCHAR(256),r_UserTypeName VARCHAR(256),r_TypeName VARCHAR(256),r_isNotNULL BOOLEAN, r_Description Text) AS $BODY$ DECLARE c_TableKind CONSTANT CHAR:='r'; v_Scale INTEGER; /*   */ --****************************************************************************************************** BEGIN RETURN QUERY SELECT ta.r_AttributeNumber::SMALLINT, ta.r_AttributeName::VARCHAR(256), ta.r_UserTypeName::VARCHAR(256), ta.r_TypeName::VARCHAR(256), ta.r_isNotNULL::BOOLEAN, ta.r_Description::TEXT FROM admtf_Table_Attributes(a_SchemaName::NAME,a_TableName::NAME) ta; RETURN; END $BODY$ LANGUAGE plpgsql; COMMENT ON FUNCTION admtf_Table_Attributes(a_SchemaName VARCHAR(256),a_TableName VARCHAR(256)) IS '   '; --ROLLBACK TRANSACTION; COMMIT TRANSACTION; SELECT * FROM admtf_Table_Attributes('public'::VARCHAR(256),'Street'::VARCHAR(256)); SELECT * FROM admtf_Table_Attributes('public'::NAME,'Street'::NAME); 



рдкрд░рд┐рд╢рд┐рд╖реНрдЯ 2. рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рдордЧреНрд░реА


рд╕рд╣рд╛рдпрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХреАрдорд╛





  • рджреЗрд╢ - рджреБрдирд┐рдпрд╛ рдХреЗ рджреЗрд╢реЛрдВ рдХрд╛ рд╡рд░реНрдЧреАрдХрд░рдг - рдУрдХреЗрдПрд╕рдПрдо (рджреБрдирд┐рдпрд╛ рдХреЗ рджреЗрд╢реЛрдВ рдХрд╛ рдЕрдЦрд┐рд▓ рд░реВрд╕реА рд╡рд░реНрдЧреАрдХрд░рдг);
  • HOUSEADDR - рдмрд╕реНрддрд┐рдпреЛрдВ рдХреА рд╕рдбрд╝рдХреЛрдВ рдкрд░ рдШрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рд╕реВрдЪреА;
  • LCLTYTYPE - рдмрд╕реНрддрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛;
  • LOCALITY тАФ ;
  • STREET тАФ ;
  • STREETTYPE тАФ ;
  • TERRITORY тАФ (, , , ..);
  • TERRITORYTYPE тАФ .



Street ()


.
1. Street ().

рд╢реНрд░реЗрдгреАрд╕рдВрдЦреНрдпрд╛рдирд╛рдордЯрд┐рдкреНрдкрдгреАрдЯрд╛рдЗрдкрдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░? рдкреВрд░реНрдг рдирд╣реАрдВ
tbl0street
att1wcrccodewcrccodesmallintt
att2localityidlocalityidintegert
att3streetidstreetidsmallintt
att4streettypeacrmstreettypeacrmcharacter(8)f
att5streetnamestreettypeacrmvarchar(150)t
pk0xpkstreetstreet
pkatt1wcrccodewcrccodesmallintt
pkatt2localityidlocalityidintegert
pkatt3streetidstreetidsmallintt
fk011fk_street_locality
fk01att1wcrccodewcrccodesmallintt
fk01att2localityidlocalityidintegert
fk01rtbl0locality
fk01ratt1wcrccodewcrccodesmallintt
fk01ratt2localityidlocalityidintegert
fk022fk_street_streettype
fk02att1streettypeacrmstreettypeacrmcharacter(8)f
fk02rtbl0streettype
fk02ratt1streettypeacrmstreettypeacrmcharacter(8)t
idx011xie1street
idx01att1wcrccodewcrccodesmallintt
idx01att2localityidlocalityidintegert
idx01att3streettypeacrmstreettypeacrmcharacter(8)f
idx01att4streetnamevarchar(150)t
idx022xie2street
idx02att1wcrccodewcrccodesmallint
idx02att2localityidlocalityidintegert
idx02att3streetnamevarchar(150)t
idx033xie3street
idx03att1streetnamevarchar(150)t
idx044xpkstreet( ) street
idx04att1wcrccodewcrccodesmallintt
idx04att2localityidlocalityidintegert
idx04att3streetidstreetidsmallintt



PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпред ;
PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпред рднрд╛рдЧ рддреАрди
PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпред рдЕрдВрдд (рднрд╛рдЧ рдЪрд╛рд░) ред

Source: https://habr.com/ru/post/hi415575/


All Articles