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

рдпрд╣ рд▓реЗрдЦ рдХрд╛ рддреАрд╕рд░рд╛ рднрд╛рдЧ рд╣реИ рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ: pg_class, pg_attribute, pg_constraints, рдЖрджрд┐ред

рд▓реЗрдЦ рдХрд╛ рдпрд╣ рдЦрдВрдб рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрдиреБрдХреНрд░рдореЛрдВ, рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╡рд┐рд╢реЗрд╖ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ ред

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

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

рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕рдВрд░рдЪрдирд╛ рдЬреЛ рддрд╛рд▓рд┐рдХрд╛ рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд▓реМрдЯрд╛рддреА рд╣реИ



рдЕрдВрдЬреАрд░ред 2. рдХрд╛рд░реНрдп рдЬрд┐рд╕ рдкрд░ adtf_Table_Sequences рдлрд╝рдВрдХреНрд╢рди рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ

рддрд╛рд▓рд┐рдХрд╛ 11. рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдпред

рд╕рдВрдЦреНрдпрд╛рдирд╛рдордирд┐рдпреБрдХреНрддрд┐
1admtf_Sequence_Featuresрдлрд╝рдВрдХреНрд╢рди рддрд╛рд▓рд┐рдХрд╛ рдЕрдиреБрдХреНрд░рдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИред
2admtf_Table_Sequencesрдлрд╝рдВрдХреНрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдЕрдиреБрдХреНрд░рдореЛрдВ рдФрд░ рдЙрдирдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИред

Admtf_Sequence_Features рдлрд╝рдВрдХреНрд╢рди - рдбреЗрдЯрд╛рдмреЗрд╕ рдЕрдиреБрдХреНрд░рдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕реВрдЪреА


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


Adtf_Sequence_Features рдлрд╝рдВрдХреНрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рдЕрдиреБрдХреНрд░рдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ (рдЦреЛрдЬ) рдХреА рдПрдХ рд╕реВрдЪреА рд▓реМрдЯрд╛рддрд╛ рд╣реИ

ред

рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдирд╛рдо ( a_SequenceName ) рдФрд░ рдЙрд╕ рдпреЛрдЬрдирд╛ рдХрд╛ рдирд╛рдо рд▓реЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рднреАрддрд░ рдЕрдиреБрдХреНрд░рдо рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ ( a_ShemaName )ред


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


SELECT * FROM kr_road_network_vertices_pgr_id_seq; 

рд░рд┐рдорд╛рд░реНрдХ 6


PostgreSQL 10 рдиреЗ рдЕрдиреБрдХреНрд░рдо рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдЗрд╕рдХреЗ рд░рд╛рдЬреНрдпреЛрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЕрдиреБрдХреНрд░рдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде pg_fterence рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкреЗрд╢ рдХреА рдЧрдИ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп ( start_value ), рд╡реЗрддрди рд╡реГрджреНрдзрд┐ ( increment_by ) рдФрд░ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп ( max_value ) рд╣реИред рдЕрдиреБрдХреНрд░рдо рджреНрд╡рд╛рд░рд╛ рдЕрдВрддрд┐рдо рдорд╛рди ( last_value ) рдХреЛ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде "рддрд╛рд▓рд┐рдХрд╛" рдореЗрдВ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

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


рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрдХреНрд░рдо рдХреА рдкреНрд░рд╕реНрддреБрддрд┐, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЕрдиреБрдХреНрд░рдо рдХреЗ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдореВрд▓реНрдп ( last_value ) рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЕрдиреБрдХреНрд░рдо рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреБрдХреНрд░рдо рд╣реА рдирд╣реАрдВред


Pg_class рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЕрдиреБрдХреНрд░рдо рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╕рдВрдмрдВрдз рдкреНрд░рдХрд╛рд░ (relkind = 'S' ) рдХреЗ рдорд╛рди рд╕реЗ рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИред


рдПрдХ рдордирдорд╛рдирд╛ рдЕрдиреБрдХреНрд░рдо рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЧрддрд┐рд╢реАрд▓ рдПрд╕рдХреНрдпреВрдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


 EXECUTE 'SELECT last_value,start_value,increment_by,max_value FROM '|| LOWER(a_SchemaName)||'.'||LOWER(a_SequenceName) INTO v_SequenceLastValue,v_SequenceStartValue, v_SequenceIncrementBy,v_SequenceMaxValue ; 


рд╕рд╛рд░рдгреА 12. рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирддреАрдЬрд╛ рд╣реИ adff_Sequence_Features ('рдЬрдирддрд╛', 'kr_road_network_vertices_pgr_id_seq')ред

рдирд╛рдордЯрд┐рдкреНрдкрдгреАрд╡рд░реНрддрдорд╛рдирд╢реБрд░реБрдЖрддрд╡реГрджреНрдзрд┐рдЕрдВрдд
kr_road_network
_vertices_pgr_id
_seq
рдЕрдиреБрд╡рд░реНрддреА рд▓рдЧрд╛рддрд╛рд░138,023119223372036854775807

рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдЕрдиреБрдХреНрд░рдореЛрдВ рдФрд░ рдЙрдирдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕реВрдЪреА admtf_Table_Sequences рд╕реВрдЪреА


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


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

a_SchemaName

)ред

рдЖрдХреГрддрд┐ рдореЗрдВ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб
 SELECT pseq.relname AS SequenceName,snsp.nspname AS SequenceSchemaName, COALESCE(dsc.description,',    ' ||da.attname) AS SequenceDescription, d.depType AS DependcyType,da.attname AS AttributeName FROM pg_depend d INNER JOIN pg_class pseq ON d.objid = pseq.oid INNER JOIN pg_namespace snsp ON pseq.relnamespace=snsp.oid LEFT OUTER JOIN pg_Description dsc ON pseq.oid=dsc.objoid AND dsc.objsubid=0 INNER JOIN pg_class tbl ON d.refobjid = tbl.oid INNER JOIN pg_namespace nsp ON tbl.relnamespace=nsp.oid INNER JOIN pg_attribute da ON da.attrelid= d.refobjid AND da.attnum= d.refobjsubid WHERE LOWER(nsp.nspname)=LOWER(a_SchemaName) AND LOWER(tbl.relname)=LOWER(a_TableOID) AND tbl.relkind = 'r' AND pseq.relkind = 'S' ORDER BY pseq.relname; 


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


рдЕрдиреБрдХреНрд░рдо рдФрд░ рд╕реНрд░реЛрдд рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА pg_dependence рд╕рд┐рд╕реНрдЯрдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИред



рддрд╛рд▓рд┐рдХрд╛ 13. рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ pg_depend рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБред
рдирд╛рдорд╡рд┐рд╡рд░рдг
ObjIdPg_class рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЕрдиреБрдХреНрд░рдо рдХрд╛ OID
objsubidрдЗрд╕ рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╢реВрдиреНрдп рд╣реИ
refobjidрдЬрд┐рди рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд╣рд╛рдВ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдУрдЖрдИрдбреА
refobjsubidрддрд╛рд▓рд┐рдХрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕рдВрдЦреНрдпрд╛ рдЬрд┐рд╕рдХрд╛ рдорд╛рди рдПрдХ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдмрд╛рджреА рд╣реИ

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


рдХрд┐рд╕реА рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЧреБрдг рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдХрд╛ рдорд╛рди рдХрд┐рд╕реА рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднрд░рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд╝рдВрдХреНрд╢рди рд╕реНрдерд┐рддрд┐ рдХреЗ рддрд╣рдд pg_attribute рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рддрдХ рдкрд╣реБрдБрдЪрддрд╛ рд╣реИ: attrelid = refobjid рдФрд░ attnum = refobjsubid ред (рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, pg_depend рдХреИрдЯрд▓реЙрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдирд╛рдо рдХреЛ рдмрд░рд╛рдмрд░ рдЪрд┐рд╣реНрди рдХреЗ рджрд╛рдИрдВ рдУрд░ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред


рддрд╛рд▓рд┐рдХрд╛ рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреА рд╡рд┐рд╢реЗрд╖ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдПрдХ рдкрд╛рд╢ рдореЗрдВ adtf_Sequence_Features рдХрд╣рдХрд░ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдЪрдХреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдЕрдиреБрдХреНрд░рдо рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


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

рдирд╛рдордЯрд┐рдкреНрдкрдгреАрд╢реБрд░реБрдЖрддрд╡реЗрддрди рд╡реГрджреНрдзрд┐рдЕрдВрддрдореИрджрд╛рди
kr_road_network
_vertices_pgr_id
_seq
рдЖрдИрдбреА рдлрд╝реАрд▓реНрдб рдорд╛рди рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЕрдиреБрдХреНрд░рдо119223372036854775807рдЖрдИрдбреА

рд╕рдВрд╕реНрдХрд░рдг рдХрд░реНрд╕рд░ рдХреЗ рдмрд┐рдирд╛


PostgreSQL рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЬрд┐рд╕рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг 10 рд╕реЗ рдХрдо рд╣реИ, рдХрд░реНрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, Adtf_Table_Sequences рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЕрд╕рдВрднрд╡ рд╣реИред
рд▓реЗрдХрд┐рди рд╕рдВрд╕реНрдХрд░рдг 10 рдХреЗ рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдорд╛рд▓рд┐рдХ рдПрдХ рдХрд░реНрд╕рд░ рдХреЗ рдмрд┐рдирд╛ рднреА рдЕрдЪреНрдЫрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ pg_fterence рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдиреБрдХреНрд░рдо рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдПрдХрд▓ рдЪрдпрди рдХрдерди рдХреЗ рд╕рд╛рде рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рджрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рд╡рд┐рдВрдбреЛ рдлрд╝рдВрдХреНрд╢рди RANK () OVER (PARTITION BY pseq.relname) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╕реНрд░реЛрдд рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЕрдиреБрдХреНрд░рдо рдХреА рдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред



рдЖрдХреГрддрд┐ рдореЗрдВ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб
 SELECT RANK() OVER (PARTITION BY pseq.relname) AS SequenceNo, pseq.relname AS SequenceName,snsp.nspname AS SequenceSchemaName, COALESCE(dsc.description,',    ' ||da.attname) AS SequenceDescription, seq.seqstart AS SequenceStartValue,seq.seqincrement AS SequenceIncrementBy, seq.seqmax AS SequenceMaxValue, d.depType AS DependcyType,da.attname AS AttributeName FROM pg_depend d INNER JOIN pg_class pseq ON d.objid = pseq.oid INNER JOIN pg_sequence seq ON seq.seqrelid= pseq.oid INNER JOIN pg_namespace snsp ON pseq.relnamespace=snsp.oid LEFT OUTER JOIN pg_Description dsc ON pseq.oid=dsc.objoid AND dsc.objsubid=0 INNER JOIN pg_class tbl ON d.refobjid = tbl.oid INNER JOIN pg_namespace nsp ON tbl.relnamespace=nsp.oid INNER JOIN pg_attribute da ON da.attrelid= d.refobjid AND da.attnum= d.refobjsubid WHERE LOWER(nsp.nspname)=LOWER(a_SchemaName) AND LOWER(tbl.relname)=LOWER(a_TableOID) AND tbl.relkind = 'r' AND pseq.relkind = 'S' ORDER BY pseq.relname; 


рд░рд┐рдорд╛рд░реНрдХ 7

ред

рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг рдЕрдиреБрдХреНрд░рдо ( last_value ) рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдЕрдВрддрд┐рдо рдорд╛рди рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

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


Admtf_Table_InheritanceChildrens рдлрд╝рдВрдХреНрд╢рди - рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕реВрдЪреА


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


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


рдПрдХрд▓ рд╡рд┐рд░рд╛рд╕рдд рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рд╡рд░реНрдгрди pg_class рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдореЗрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╕реНрд░реЛрдд рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдирд╛рдо рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ pg_dependence рд╕рд┐рд╕реНрдЯрдо рдХреИрдЯрд▓реЙрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ред


рддрд╛рд▓рд┐рдХрд╛ 15. рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ pg_depend рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБред
рдирд╛рдорд╡рд┐рд╡рд░рдг
ObjIdPg_class рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ OID
refobjidрд╕реНрд░реЛрдд рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдУрдЖрдИрдбреА


рдЖрдХреГрддрд┐ рдореЗрдВ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб
 SELECT rtbl.relname,rnspc.nspname,rdsc.description,rtbl.relnatts::INTEGER, rtbl.relchecks::INTEGER, rtbl.relhaspkey,rtbl.relhasindex,rtbl.relhassubclass, rtbl.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 INNER JOIN pg_depend dp ON tbl.oid=dp.refobjid INNER JOIN pg_class rtbl ON rtbl.OID=dp.objid INNER JOIN pg_namespace rnspc ON rtbl.relnamespace = rnspc.oid LEFT OUTER JOIN pg_Description rdsc ON rtbl.oid=rdsc.objoid AND rdsc.objsubid=0 WHERE LOWER(nspc.nspname)=LOWER(a_SchemaName) AND LOWER(tbl.relname)=LOWER(a_TableOID) AND tbl.relkind = 'r' AND rtbl.relkind = 'r' ORDER BY rtbl.relname; 


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


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

рдирд╛рдордЯрд┐рдкреНрдкрдгреАрдЧреБрдг? рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА? рд╕реВрдЪрдХрд╛рдВрдХ? рд╡рдВрд╢рд░рд┐рдХреЙрд░реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛
np_house 04201 000000рдмрд╕реНрддрд┐рдпреЛрдВ рдореЗрдВ рдШрд░ (рдЕрдЪрд┐рдВрд╕реНрдХреА рдЬрд┐рд▓рд╛)15рдЪрдЪрдЪ5651
np_house 4208 000 000рдмрд╕реНрддрд┐рдпреЛрдВ рдореЗрдВ рдШрд░ (рдмреЛрдЧреЛрдЯреЛрд▓рд╕реНрдХреА рдЬрд┐рд▓рд╛)15рдЪрдЪрдЪ4314

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


 EXECUTE 'SELECT COUNT(*) FROM '||LOWER(a_SchemaName)||'.'||LOWER(a_TableName) INTO v_TableNumberOfRowCalc; 

рд▓реЗрдХрд┐рди, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкрд╛рда рдореЗрдВ рдЗрд╕ рдХрдерди рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди adtf_Table_InheritanceChildrens рдХреЛ рдПрдХ рдХрд░реНрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


рджреВрд╕рд░реЗ, рдореИрдВ рдпрд╣ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рддрд╛рд▓рд┐рдХрд╛ рдХреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рдЕрдиреБрдорд╛рдирд┐рдд рдФрд░ рд╕рдЯреАрдХ рд╕рдВрдЦреНрдпрд╛ рджреЛрдиреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред


рдЗрд╕рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ - рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ ( a_Mode ) рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ , рдЬреЛ рдорд╛рди "рдЕрдиреБрдорд╛рди" ( рдЕрдиреБрдорд╛рди ) рдпрд╛ "рдмрд┐рд▓реНрдХреБрд▓" ( рдмрд┐рд▓реНрдХреБрд▓ ) рд▓реЗрддрд╛ рд╣реИред



рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, admfn_Table_RowCount рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ , рдЬреЛ рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рд╕рдЯреАрдХ рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдФрд░ Reltuple рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде SELECT рд░рд┐рдЯрд░реНрди рд╕реВрдЪреА рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рдЖрдХреГрддрд┐ рдореЗрдВ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб
 CASE WHEN a_Mode = 'exactly' THEN admfn_Table_RowCount(rnspc.nspname,rtbl.relname) ELSE reltuples END 


рдирддреАрдЬрддрди, рдлрд╝рдВрдХреНрд╢рди рд╕рдВрдХреЗрддрдХ "рдЯреЗрдмрд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛" рдХрд╛ рдЕрдиреБрдорд╛рдирд┐рдд рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдкреИрд░рд╛рдореАрдЯрд░ a_Mode рд╕рдЯреАрдХ рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред


рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕рдВрд░рдЪрдирд╛ рдЬреЛ рддрд╛рд▓рд┐рдХрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд▓реМрдЯрд╛рддреА рд╣реИ



рдЕрдВрдЬреАрд░ред 3. рдХрд╛рд░реНрдп рдЬреЛ Adtf_Attribute_Features рдХреЙрд▓реНрд╕ рдХреЛ рдорд╛рдирддреЗ рд╣реИрдВ

рдЖрдХреГрддрд┐ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдкрд╛рда рд╕рдВрд╕реНрдХрд░рдг
рддрд╛рд▓рд┐рдХрд╛ 17. рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдпред

рд╕рдВрдЦреНрдпрд╛рдирд╛рдордирд┐рдпреБрдХреНрддрд┐
1admtf_Attribute_PKFeaturesрдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА (PRIMARY KEY) рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЙрдкрд╕реНрдерд┐рддрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рджреЗрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЗрд╕ рдХреБрдВрдЬреА рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рднреА рд╣реИрдВред
2admtf_Attribute_FKFeaturesрдлрд╝рдВрдХреНрд╢рди рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА (FOREIGN KEY) рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЙрдкрд╕реНрдерд┐рддрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рджреЗрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЗрд╕ рдХреБрдВрдЬреА рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рднреА рд╣реИрдВред
3admtf_Attribute_Featuresрдлрд╝рдВрдХреНрд╢рди рддрд╛рд▓рд┐рдХрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИред


рдХрд╛рд░реНрдп рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ - рд╡рд┐рд╢реЗрд╖рддрд╛_PKFeatures - - рдХреНрдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдореЗрдВ рдореМрдЬреВрдж рд╣реИ



Adtf_Attribute_PKFeatures рдлрд╝рдВрдХреНрд╢рди рддрд╛рд▓рд┐рдХрд╛ рдХреА рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА (PRIMARY KEY) рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдпрд╣ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдЗрд╕ рдХреБрдВрдЬреА рдореЗрдВ рдЗрд╕рдХрд╛ рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ рдХреНрдпрд╛ рд╣реИ, рдХрдм рд╕реЗ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рд╕рдордЧреНрд░ рд╣реЛ рд╕рдХрддреА рд╣реИред
рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред


рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рд╕реНрд░реЛрдд рддрд╛рд▓рд┐рдХрд╛ ( a_TableOID ) рдХрд╛ OID рдФрд░ рдЙрд╕рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ ( a_AttributeNo ) рд▓реЗрддрд╛ рд╣реИ ред


рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдердорд┐рдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдореБрдЦреНрдп рддрд╛рд▓рд┐рдХрд╛ рд╕рд╣рд┐рдд рд╕реНрд░реЛрдд рддрд╛рд▓рд┐рдХрд╛ рдХреА (CONSTRAINT) рдмрд╛рдзрд╛рдУрдВ рд╡рд╛рд▓реА pg_constraint рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИред рддрд╛рд▓рд┐рдХрд╛ OID рдХреЛ рдХреЙрдиреНрдлреНрд░рд┐рдб рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рд╡рд┐рд╡рд░рдг рдХреЛ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЙрдиреЛрдЯрд╛рдЗрдк рдлрд╝реАрд▓реНрдб рдореЗрдВ рдорд╛рди '' p '' рд╣реЛрддрд╛ рд╣реИред

ред
 SELECT INTO v_PKAttributeList,rs_isAttributePK conkey,ARRAY[a_AttributeNo]<@conkey FROM pg_constraint c WHERE c.contype='p' AND c.conrelid=a_TableOID; 

рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╢рдВрдХреБ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реЛрддреА рд╣реИ рдЬреЛ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдмрдирд╛рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдореЗрдВ рд╕реНрд░реЛрдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рддрд╛рд░реНрдХрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ ARRAY [a_AttributeNo] <@ conkey рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред


рдпрджрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдЗрд╕рдХреА рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рд▓реВрдк рдореЗрдВ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред


рдлрдВрдХреНрд╢рди admtf_Attribute_FKFeatures - рдХреНрдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА рдореЗрдВ рдореМрдЬреВрдж рд╣реИ



Adtf_Attribute_FKFeatures рдлрд╝рдВрдХреНрд╢рди рддрд╛рд▓рд┐рдХрд╛ рдХреА рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬрд┐рдпреЛрдВ (FOREIGN KEY) рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдпрд╣ рдореМрдЬреВрдж рд╣реИ, рддреЛ рдЗрди рдХреБрдВрдЬрд┐рдпреЛрдВ рдореЗрдВ рдЗрд╕рдХреА рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рдХреНрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА рд╕рдордЧреНрд░ рд╣реЛ рд╕рдХрддреА рд╣реИред

рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред


рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рд╕реНрд░реЛрдд рддрд╛рд▓рд┐рдХрд╛ ( a_TableOID ) рдХрд╛ OID рдФрд░ рдЙрд╕рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ ( a_AttributeNo ) рд▓реЗрддрд╛ рд╣реИ ред


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

ред
 SELECT * FROM pg_constraint c WHERE c.contype='f ' AND c.conrelid=a_TableOID AND ARRAY[a_AttributeNo]<@conkey ORDER BY c.oid; 

рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╢рдВрдХреБ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕рдВрдЦреНрдпрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА рдмрдирд╛рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА рдореЗрдВ рд╕реНрд░реЛрдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рддрд╛рд░реНрдХрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ ARRAY [a_AttributeNo] <@ conkey рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред


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


рддрд╛рд▓рд┐рдХрд╛ рдирд╛рдореЛрдВ рдХреЛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (OID) рджреНрд╡рд╛рд░рд╛ pg_class рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рдЧреЛрдкрдиреАрдп рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдмрд╛рд╣рд░реА рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдирд╛рдо рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝реАрд▓реНрдб рд╕реЗ рдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

confkey

(рдпрд╣ рдирд╛рдо рдореЗрдВ " f " рдЕрдХреНрд╖рд░ рджреНрд╡рд╛рд░рд╛ рдЙрдкрд░реЛрдХреНрдд рд╕рд░рдгреА рд╕реЗ рднрд┐рдиреНрди рд╣реИ)ред рдмрд╛рд╣рд░реА рд╕рд╛рд░рдгреА рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рдЬрд┐рд╕реЗ рдмрд╛рд╣рд░реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ рдЗрд╕ рд╕рд░рдгреА рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрд╛рд╣рд░реА рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рдЙрд╕рдХреЗ OID рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдЗрд╕ рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ рдХреЗ рджреНрд╡рд╛рд░рд╛, pg_attribute рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдирд╛рдо рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

Admtf_Attribute_Features рдлрд╝рдВрдХреНрд╢рди - рддрд╛рд▓рд┐рдХрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕реВрдЪреА


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



рдЖрдХреГрддрд┐ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдкрд╛рда рд╕рдВрд╕реНрдХрд░рдг
рд╕рдВрдЦреНрдпрд╛рдирд╛рдордЯрд╛рдЗрдкрдирд┐рдпреБрдХреНрддрд┐
1AttributeNameрдирд╛рдорд╕реНрд░реЛрдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдирд╛рдоред
2UserTypeNameрд╡рд░реНрдЪ (256)рдХрд╕реНрдЯрдо рд╕реНрд░реЛрдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рдХрд╛рд░
3TypeNameрд╡рд░реНрдЪ (256)рдЖрдзрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реНрд░реЛрдд рдЧреБрдг
4isNotNULLрдмреВрд▓рд┐рдпрди? рдЕрд╢рдХреНрддрддрд╛
5isAttributePKрдмреВрд▓рд┐рдпрди? рдкреАрдХреЗ рдореЗрдВ рднрд╛рдЧреАрджрд╛рд░реА
6ColumnPKNoSMALLINTрдкреАрдХреЗ рдореЗрдВ рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ рджреЗрдВ
7рд╡рд┐рд╡рд░рдгрдкрд╛рдард╕реНрд░реЛрдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВ
8isAttributeFKрдмреВрд▓рд┐рдпрди? рдПрдлрдХреЗ рдореЗрдВ рднрд╛рдЧреАрджрд╛рд░реА
9FKeyNameрдирд╛рдо []рдмрд╛рдзрд╛ рддрд╛рд▓рд┐рдХрд╛ рдирд╛рдореЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
10ColumnFKNoSMALLINT []рддрд╛рд▓рд┐рдХрд╛ рдХреА рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рд╕рд░рдгреА
11FKTableNameрдирд╛рдо []рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рд╕рд░рдгреА
12FKTableColumnNameрдирд╛рдо []рд╕реНрд░реЛрдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдмрд╛рд╣рд░реА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдореЛрдВ рдХреА рд╕рд░рдгреА


рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рд╕реНрд░реЛрдд рддрд╛рд▓рд┐рдХрд╛ ( a_TableOID ) рдХрд╛ OID рдФрд░ рдЙрд╕рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ ( a_AttributeNo ) рд▓реЗрддрд╛ рд╣реИ ред
рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рди рдФрд░ isNotNULL рдлрд╝реАрд▓реНрдб рдХреЗ рдорд╛рди рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдорд╛рди рдХреЗ рдЕрдиреБрд╕рд╛рд░ pg_attribute рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред


 SELECT attr.attname, attr.attnotnull FROM pg_attribute attr WHERE attr.attrelid =a_TableOID AND attr.attnum=a_AttributeNo; SELECT rs_isAttributePK,rs_ColumnPKNo FROM admtf_Attribute_PKFeatures (a_TableOID,a_AttributeNo); SELECT rs_isAttributeFK,rs_FKeyName,rs_ColumnFKNo, rs_FKTableName,rs_FKTableColumnName FROM admtf_Attribute_FKFeatures (a_TableOID,a_AttributeNo); 

IsAttributePK рдФрд░ ColumnPKNo рдлрд╝реАрд▓реНрдб рдХреЗ рдорд╛рдиреЛрдВ рдХреЛ adtf_Attribute_PKFeatures рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


IsAttributeFK , FKeyName , ColumnFKNo , FKTableName , FKTableColumnName рдлрд╝реАрд▓реНрдб рдХреЗ рдорд╛рдиреЛрдВ рдХреЛ adtf_Attribute_FKFeatures рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


Adtf_Attribute_Features ((SELECT FID рдлреНрд░реЙрдо pg_class WHERE relname = 'street') рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ , 2 :: SMALLINT) рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛ред


рддрд╛рд▓рд┐рдХрд╛ 18. рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо adtf_Attribute_Features
AttributeNameUserTypeNameTypeNameisNotNULLisAttributePKColumnPKNo
localityidlocalityidрдкреВрд░реНрдгрд╛рдВрдХрдкреВрд░реНрдгрд╛рдВрдХрдкреВрд░реНрдгрд╛рдВрдХрдкреВрд░реНрдгрд╛рдВрдХ


рд╡рд┐рд╡рд░рдгisAttributeFKFKeyNameColumnFKNoFKTableNameFKTableColumnName
рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдЖрдИрдбреАрдЯреА{} Fk_street_locality{2}{} рдЗрд▓рд╛рдХрд╛{} Localityid

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


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


рдлрд╝рдВрдХреНрд╢рди рд╕реНрд░реЛрдд рдХреЛрдб рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред
рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб
 BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admtf_Sequence_Features (a_SchemaName NAME,a_SequenceName NAME); /****************************************************************************/ /*     ,   */ /****************************************************************************/ CREATE OR REPLACE FUNCTION admtf_Sequence_Features (a_SchemaName NAME default 'public', /*     */ a_SequenceName NAME default NULL /*   */ ) RETURNS TABLE (rs_SequenceName NAME,rs_SequenceDescription TEXT,rs_NumberOfAttribute INTEGER,rs_SequenceLastValue BIGINT, rs_SequenceStartValue BIGINT,rs_SequenceIncrementBy BIGINT,rs_SequenceMaxValue BIGINT) AS $BODY$ DECLARE c_SequenceKind CONSTANT CHAR:='S'; v_SequenceOID OID; /*   */ v_SequenceName NAME; /*   */ v_SequenceDescription TEXT; /*   */ v_SequenceStartValue BIGINT; /*    */ v_SequenceIncrementBy BIGINT; /*   */ v_SequenceMaxValue BIGINT; /*    */ v_SequenceLastValue BIGINT; /*    */ v_SequenceNumberOfRowCalc INTEGER; /*     */ --************************************************************************ BEGIN SELECT INTO rs_SequenceName,rs_SequenceDescription,rs_NumberOfAttribute tbl.relname, COALESCE(dsc.description,'') AS r_SequenceDescription, 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_SequenceKind AND tbl.relname =LOWER(a_SequenceName); IF FOUND THEN EXECUTE 'SELECT last_value,start_value,increment_by,max_value FROM '||LOWER(a_SchemaName)||'.'||LOWER(a_SequenceName) INTO v_SequenceLastValue,v_SequenceStartValue, v_SequenceIncrementBy,v_SequenceMaxValue ; RETURN QUERY SELECT rs_SequenceName,rs_SequenceDescription, rs_NumberOfAttribute,v_SequenceLastValue, v_SequenceStartValue,v_SequenceIncrementBy, v_SequenceMaxValue; END IF; RETURN; END $BODY$ LANGUAGE plpgsql; COMMENT ON FUNCTION admtf_Sequence_Features(a_SchemaName NAME,a_SequenceName NAME) IS '    ,  '; --ROLLBACK TRANSACTION; COMMIT TRANSACTION; BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admtf_Sequence_Features (a_SchemaName VARCHAR(256),a_SequenceName VARCHAR(256)); /****************************************************************************/ /*     ,   */ /****************************************************************************/ CREATE OR REPLACE FUNCTION admtf_Sequence_Features (a_SchemaName VARCHAR(256) default 'public', /*     */ a_SequenceName VARCHAR(256) default NULL /*   */ ) RETURNS TABLE (rs_SequenceName VARCHAR(256),rs_SequenceDescription TEXT, rs_NumberOfAttribute INTEGER,rs_SequenceLastValue BIGINT, rs_SequenceStartValue BIGINT,rs_SequenceIncrementBy BIGINT, rs_SequenceMaxValue BIGINT) AS $BODY$ DECLARE c_SequenceKind CONSTANT CHAR:='S'; --******************************************************** BEGIN RETURN QUERY SELECT sf.rs_SequenceName::VARCHAR(256), sf.rs_SequenceDescription::TEXT, sf.rs_NumberOfAttribute::INTEGER, sf.rs_SequenceLastValue::BIGINT, sf.rs_SequenceStartValue::BIGINT, sf.rs_SequenceIncrementBy::BIGINT, sf.rs_SequenceMaxValue::BIGINT FROM admtf_Sequence_Features(a_SchemaName::NAME,a_SequenceName::NAME) sf; END $BODY$ LANGUAGE plpgsql; COMMENT ON FUNCTION admtf_Sequence_Features(a_SchemaName VARCHAR(256),a_SequenceName VARCHAR(256)) IS '    ,  '; --ROLLBACK TRANSACTION; COMMIT TRANSACTION; SELECT * FROM admtf_Sequence_Features('public'::VARCHAR(255),'k_dorogi_dijkstra_seq_seq'::VARCHAR(255)); SELECT * FROM admtf_Sequence_Features('public'::NAME,'kr_road_network_vertices_pgr_id_seq'::NAME); 



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


рдлрд╝рдВрдХреНрд╢рди рд╕реНрд░реЛрдд рдХреЛрдб рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред
рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб
 BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admtf_Table_Sequences (a_SchemaName NAME, a_TableName NAME); /*********************************************************************/ /*    ,     */ /*********************************************************************/ CREATE OR REPLACE FUNCTION admtf_Table_Sequences (a_SchemaName NAME default 'public', /*     */ a_TableName NAME default NULL /*   */ ) RETURNS TABLE (r_SequenceNumber SMALLINT,r_SequenceName NAME, r_SequenceSchemaName NAME,r_SequenceDescription TEXT, r_SequenceStartValue BIGINT,r_SequenceIncrementBy BIGINT, r_SequenceMaxValue BIGINT,r_DependType NAME, r_RefTableName NAME,r_RefTableSchemaName NAME, r_RefAttributeName NAME) AS $BODY$ DECLARE v_TableOID INTEGER;/* OID */ v_Sequence RECORD;/*   */ v_SequenceOID INTEGER;/* OID */ v_SequenceName NAME; /*   */ v_SequenceSchemaName NAME; /*    */ v_SequenceDescription TEXT; /*   */ v_SequenceStartValue BIGINT; /*    */ v_SequenceIncrementBy BIGINT; /*   */ v_SequenceMaxValue BIGINT; /*    */ v_DependcyType NAME; /*     */ /*    */ v_AttributeName NAME; /*  */ v_SequenceNumber SMALLINT; /*   */ c_Delimiter CONSTANT VARCHAR(2):=','; --********************************************************************* BEGIN v_SequenceNumber:=0; FOR v_Sequence IN SELECT pseq.relname AS SequenceName, snsp.nspname AS SequenceSchemaName, COALESCE(dsc.description,',    '||da.attname) AS SequenceDescription, d.depType AS DependcyType,da.attname AS AttributeName FROM pg_depend d INNER JOIN pg_class pseq ON d.objid = pseq.oid INNER JOIN pg_namespace snsp ON pseq.relnamespace=snsp.oid LEFT OUTER JOIN pg_Description dsc ON pseq.oid=dsc.objoid AND dsc.objsubid=0 INNER JOIN pg_class tbl ON d.refobjid = tbl.oid INNER JOIN pg_namespace nsp ON tbl.relnamespace=nsp.oid INNER JOIN pg_attribute da ON da.attrelid= d.refobjid AND d.refobjsubid=da.attnum WHERE tbl.relkind = 'r' AND pseq.relkind = 'S' AND LOWER(nsp.nspname)=LOWER(a_SchemaName) AND LOWER(tbl.relname)=LOWER(a_TableName) ORDER BY pseq.relname LOOP v_SequenceNumber:=v_SequenceNumber+1; v_SequenceName:=v_Sequence.SequenceName; v_SequenceSchemaName:=v_Sequence.SequenceSchemaName; v_DependcyType:=v_Sequence.DependcyType; v_AttributeName:=v_Sequence.AttributeName; v_SequenceDescription:=v_Sequence.SequenceDescription; SELECT INTO v_SequenceStartValue,v_SequenceIncrementBy, v_SequenceMaxValue rs_SequenceStartValue,rs_SequenceIncrementBy, rs_SequenceMaxValue FROM admtf_Sequence_Features(v_SequenceSchemaName,v_SequenceName); RETURN QUERY SELECT v_SequenceNumber,v_SequenceName, v_SequenceSchemaName,v_SequenceDescription, v_SequenceStartValue,v_SequenceIncrementBy, v_SequenceMaxValue,v_DependcyType, a_TableName,a_SchemaName,v_AttributeName; END LOOP; RETURN; END $BODY$ LANGUAGE plpgsql; COMMENT ON FUNCTION admtf_Table_Sequences(a_SchemaName NAME, a_TableName NAME) IS '  ,    '; --ROLLBACK TRANSACTION; COMMIT TRANSACTION; BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admtf_Table_Sequences (a_SchemaName VARCHAR(256), a_TableName VARCHAR(256)); /**********************************************************************/ /*    ,     */ /**********************************************************************/ CREATE OR REPLACE FUNCTION admtf_Table_Sequences (a_SchemaName VARCHAR(256) default 'public', /*     */ a_TableName VARCHAR(256) default NULL /*   */ ) RETURNS TABLE (r_SequenceNumber SMALLINT,r_SequenceName VARCHAR(256), r_SequenceSchemaName VARCHAR(256),r_SequenceDescription TEXT, r_SequenceStartValue BIGINT,r_SequenceIncrementBy BIGINT, r_SequenceMaxValue BIGINT,r_DependType VARCHAR(256), r_RefTableName VARCHAR(256),r_RefTableSchemaName VARCHAR(256), r_RefAttributeName VARCHAR(256)) AS $BODY$ DECLARE c_Delimiter CONSTANT VARCHAR(2):=','; --****************************************************** BEGIN RETURN QUERY SELECT ts.r_SequenceNumber::SMALLINT, ts.r_SequenceName::VARCHAR(256), ts.r_SequenceSchemaName::VARCHAR(256) , ts.r_SequenceDescription::TEXT, ts.r_SequenceStartValue::BIGINT, ts.r_SequenceIncrementBy::BIGINT, ts.r_SequenceMaxValue::BIGINT, ts.r_DependType::VARCHAR(256), ts.r_RefTableName::VARCHAR(256), ts.r_RefTableSchemaName::VARCHAR(256), ts.r_RefAttributeName::VARCHAR(256) FROM admtf_Table_Sequences(a_SchemaName::NAME,a_TableName::NAME) ts; END $BODY$ LANGUAGE plpgsql; COMMENT ON FUNCTION admtf_Table_Sequences(a_SchemaName VARCHAR(256), a_TableName VARCHAR(256)) IS '  ,    '; --ROLLBACK TRANSACTION; COMMIT TRANSACTION; SELECT * FROM admtf_Table_Sequences('public'::VARCHAR(255),'kr_road_network_vertices_pgr'::VARCHAR(255)); SELECT * FROM admtf_Table_Sequences('public'::NAME,'kr_road_network_vertices_pgr'::NAME); 


admtf_Table_Sequences (PostgreSQL 10)


.
 BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admtf_Table_Sequences (a_SchemaName NAME, a_TableName NAME); /*********************************************************************/ /*    ,     */ /**********************************************************************/ CREATE OR REPLACE FUNCTION admtf_Table_Sequences (a_SchemaName NAME default 'public', /*     */ a_TableName NAME default NULL /*   */ ) RETURNS TABLE (r_SequenceNumber SMALLINT,r_SequenceName NAME, r_SequenceSchemaName NAME,r_SequenceDescription TEXT, r_SequenceStartValue BIGINT,r_SequenceIncrementBy BIGINT, r_SequenceMaxValue BIGINT,r_DependType NAME, r_RefTableName NAME,r_RefTableSchemaName NAME, r_RefAttributeName NAME) AS $BODY$ DECLARE v_TableOID INTEGER; /* OID */ v_Sequence RECORD; /*   */ v_SequenceOID INTEGER; /* OID */ v_SequenceName NAME; /*   */ v_SequenceSchemaName NAME; /*    */ v_SequenceDescription TEXT; /*   */ v_SequenceStartValue BIGINT; /*    */ v_SequenceIncrementBy BIGINT; /*   */ v_SequenceMaxValue BIGINT; /*    */ v_DependcyType NAME; /*        */ v_AttributeName NAME; /*  */ v_SequenceNumber SMALLINT; /*   */ c_Delimiter CONSTANT VARCHAR(2):=','; --****************************************************************** BEGIN v_SequenceNumber:=0; FOR v_Sequence IN SELECT pseq.relname AS SequenceName, snsp.nspname AS SequenceSchemaName, COALESCE(dsc.description,',    '||da.attname) AS SequenceDescription, d.depType AS DependcyType,da.attname AS AttributeName FROM pg_depend d INNER JOIN pg_class pseq ON d.objid = pseq.oid INNER JOIN pg_namespace snsp ON pseq.relnamespace=snsp.oid LEFT OUTER JOIN pg_Description dsc ON pseq.oid=dsc.objoid AND dsc.objsubid=0 INNER JOIN pg_class tbl ON d.refobjid = tbl.oid INNER JOIN pg_namespace nsp ON tbl.relnamespace=nsp.oid INNER JOIN pg_attribute da ON da.attrelid= d.refobjid ND d.refobjsubid=da.attnum WHERE tbl.relkind = 'r' AND pseq.relkind = 'S' AND LOWER(nsp.nspname)=LOWER(a_SchemaName) AND LOWER(tbl.relname)=LOWER(a_TableName) ORDER BY pseq.relname LOOP v_SequenceNumber:=v_SequenceNumber+1; v_SequenceName:=v_Sequence.SequenceName; v_SequenceSchemaName:=v_Sequence.SequenceSchemaName; v_DependcyType:=v_Sequence.DependcyType; v_AttributeName:=v_Sequence.AttributeName; v_SequenceDescription:=v_Sequence.SequenceDescription; SELECT INTO v_SequenceStartValue,v_SequenceIncrementBy,v_SequenceMaxValue rs_SequenceStartValue,rs_SequenceIncrementBy,rs_SequenceMaxValue FROM admtf_Sequence_Features(v_SequenceSchemaName,v_SequenceName); RETURN QUERY SELECT v_SequenceNumber,v_SequenceName, v_SequenceSchemaName,v_SequenceDescription, v_SequenceStartValue,v_SequenceIncrementBy, v_SequenceMaxValue,v_DependcyType, a_TableName,a_SchemaName,v_AttributeName; END LOOP; RETURN; END $BODY$ LANGUAGE plpgsql; COMMENT ON FUNCTION admtf_Table_Sequences(a_SchemaName NAME, a_TableName NAME) IS '  ,    '; --ROLLBACK TRANSACTION; COMMIT TRANSACTION; BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admtf_Table_Sequences (a_SchemaName VARCHAR(256), a_TableName VARCHAR(256)); /**********************************************************************/ /*    ,     */ /**********************************************************************/ CREATE OR REPLACE FUNCTION admtf_Table_Sequences (a_SchemaName VARCHAR(256) default 'public', /*     */ a_TableName VARCHAR(256) default NULL /*   */ ) RETURNS TABLE (r_SequenceNumber SMALLINT,r_SequenceName VARCHAR(256), r_SequenceSchemaName VARCHAR(256),r_SequenceDescription TEXT, r_SequenceStartValue BIGINT,r_SequenceIncrementBy BIGINT, r_SequenceMaxValue BIGINT,r_DependType VARCHAR(256), r_RefTableName VARCHAR(256),r_RefTableSchemaName VARCHAR(256), r_RefAttributeName VARCHAR(256)) AS $BODY$ DECLARE c_Delimiter CONSTANT VARCHAR(2):=','; --******************************************************* BEGIN RETURN QUERY SELECT ts.r_SequenceNumber::SMALLINT, ts.r_SequenceName::VARCHAR(256), ts.r_SequenceSchemaName::VARCHAR(256), ts.r_SequenceDescription::TEXT, ts.r_SequenceStartValue::BIGINT, ts.r_SequenceIncrementBy::BIGINT, ts.r_SequenceMaxValue::BIGINT, ts.r_DependType::VARCHAR(256), ts.r_RefTableName::VARCHAR(256), ts.r_RefTableSchemaName::VARCHAR(256), ts.r_RefAttributeName::VARCHAR(256) FROM admtf_Table_Sequences(a_SchemaName::NAME,a_TableName::NAME) ts; END $BODY$ LANGUAGE plpgsql; COMMENT ON FUNCTION admtf_Table_Sequences(a_SchemaName VARCHAR(256), a_TableName VARCHAR(256)) IS '  ,    '; --ROLLBACK TRANSACTION; COMMIT TRANSACTION; SELECT * FROM admtf_Table_Sequences('public'::VARCHAR(255), 'kr_road_network_vertices_pgr'::VARCHAR(255)); SELECT * FROM admtf_Table_Sequences('public'::NAME, 'kr_road_network_vertices_pgr'::NAME); 



admfn_Table_RowCount


.
 BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admfn_Table_RowCount (a_SchemaName NAME,a_TableName NAME); /******************************************************/ /*       */ /******************************************************/ CREATE OR REPLACE FUNCTION admfn_Table_RowCount (a_SchemaName NAME default 'public',/*     */ a_TableName NAME default NULL /*   */ ) RETURNS BIGINT AS $BODY$ DECLARE v_TableNumberOfRowCalc BIGINT; /*  */ v_Found BOOLEAN; --*********************************************************** BEGIN IF a_SchemaName ~ E'^[a-z_0-9]+$' AND a_TableName ~ E'^[a-z_0-9]+$' THEN EXECUTE 'SELECT count(*) FROM ' ||a_SchemaName ||'.'|| a_TableName INTO v_TableNumberOfRowCalc; ELSE SELECT INTO v_Found true FROM pg_class tbl INNER JOIN pg_namespace nspc ON tbl.relnamespace = nspc.oid WHERE tbl.relkind='r' AND tbl.relname=a_TableName AND nspc.nspname=a_SchemaName; IF FOUND THEN EXECUTE 'SELECT count(*) FROM ' || CASE WHEN a_SchemaName ~ E'^[a-z_0-9]+$' THEN a_SchemaName ELSE quote_ident(a_SchemaName) END ||'.'|| CASE WHEN a_TableName ~ E'^[a-z_0-9]+$' THEN a_TableName ELSE quote_ident(a_TableName) END INTO v_TableNumberOfRowCalc; ELSE SELECT INTO v_Found true FROM pg_class tbl INNER JOIN pg_namespace nspc ON tbl.relnamespace = nspc.oid WHERE tbl.relkind='r' AND LOWER(tbl.relname)= LOWER(a_TableName) AND nspc.nspname=LOWER(a_SchemaName); IF FOUND THEN EXECUTE 'SELECT count(*) FROM ' || a_SchemaName ||'.'||a_TableName INTO v_TableNumberOfRowCalc; END IF; END IF; END IF; RETURN v_TableNumberOfRowCalc; END $BODY$ LANGUAGE plpgsql; COMMENT ON FUNCTION admfn_Table_RowCount(a_SchemaName NAME,a_TableName NAME) IS '    '; --ROLLBACK TRANSACTION; COMMIT TRANSACTION;BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admfn_Table_RowCount (a_SchemaName VARCHAR(256),a_TableName VARCHAR(256)); /********************************************************************/ /*       */ /********************************************************************/ CREATE OR REPLACE FUNCTION admfn_Table_RowCount (a_SchemaName VARCHAR(256) default 'public',/*     */ a_TableName VARCHAR(256) default NULL /*   */ ) RETURNS BIGINT AS $BODY$ DECLARE v_TableNumberOfRowCalc BIGINT; /*  */ --********************************************************* BEGIN RETURN admfn_Table_RowCount(a_SchemaName::NAME,a_TableName::NAME); END $BODY$ LANGUAGE plpgsql; COMMENT ON FUNCTION admfn_Table_RowCount(a_SchemaName VARCHAR(256),a_TableName VARCHAR(256)) IS '    '; --ROLLBACK TRANSACTION; COMMIT TRANSACTION; SELECt admfn_Table_RowCount('public'::NAME,'Street'::NAME); SELECt admfn_Table_RowCount('public'::VARCHAR(256),'Street'::VARCHAR(256)); 


admtf_Table_InheritanceChildrens


.
 BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admtf_Table_InheritanceChildrens (a_SchemaName NAME,a_TableName NAME,a_Mode VARCHAR(10)); /************************************************************/ /*       */ /************************************************************/ CREATE OR REPLACE FUNCTION admtf_Table_InheritanceChildrens (a_SchemaName NAME default 'public', /*     */ a_TableName NAME default NULL, /*   */ a_Mode VARCHAR(10) default 'estimate' /*     */ ) 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'; c_ExactlyMode CONSTANT VARCHAR(10):='exactly'; c_EstimateMode CONSTANT VARCHAR(10):='estimate'; v_TableOID OID; /*   */ v_SchemaName NAME; /*    */ v_TableName NAME; /*   */ v_TableDescription TEXT; /*   */ v_TableNumberOfRowCalc INTEGER; /*     */ v_InheritanceRECORD RECORD; /*    */ v_InheritanceOID OID; /*    */ BEGIN RETURN QUERY SELECT rtbl.relname,rdsc.description,rtbl.relnatts::INTEGER, rtbl.relchecks::INTEGER,rtbl.relhaspkey,rtbl.relhasindex, rtbl.relhassubclass, CASE WHEN a_Mode=c_ExactlyMode THEN admfn_Table_RowCount(rnspc.nspname,rtbl.relname)::INTEGER ELSE rtbl.reltuples::INTEGER END 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 INNER JOIN pg_depend dp ON tbl.oid=dp.refobjid INNER JOIN pg_class rtbl ON rtbl.OID=dp.objid INNER JOIN pg_namespace rnspc ON rtbl.relnamespace = rnspc.oid LEFT OUTER JOIN pg_Description rdsc ON rtbl.oid=rdsc.objoid AND rdsc.objsubid=0 WHERE nspc.nspname=LOWER(a_SchemaName) AND tbl.relkind=c_TableKind AND rtbl.relkind=c_TableKind AND tbl.relname =LOWER(a_TableName) ORDER BY rtbl.relname; END $BODY$ LANGUAGE plpgsql; COMMENT ON FUNCTION admtf_Table_InheritanceChildrens(a_SchemaName NAME,a_TableName NAME,a_Mode VARCHAR(10)) IS '    '; --ROLLBACK TRANSACTION; COMMIT TRANSACTION; BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admtf_Table_InheritanceChildrens (a_SchemaName VARCHAR(256),a_TableName VARCHAR(256),a_TableName NAME,a_Mode VARCHAR(10)); /************************************************************************/ /*       */ /************************************************************************/ CREATE OR REPLACE FUNCTION admtf_Table_InheritanceChildrens (a_SchemaName VARCHAR(256) default 'public',/*     */ a_TableName VARCHAR(256) default NULL,/*   */ a_Mode VARCHAR(10) default 'estimate' /*     */ ) 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'; BEGIN RETURN QUERY SELECT tic.rs_TableName::VARCHAR(256),tic.rs_TableDescription::TEXT, tic.rs_NumberOfAttribute::INTEGER,tic.rs_NumberOfChecks::INTEGER, tic.rs_hasPKey::BOOLEAN,tic.rs_hasIndex::BOOLEAN, tic.rs_hasSubClass::BOOLEAN,tic.rs_NumberOfRow::INTEGER FROM admtf_Table_InheritanceChildrens(a_SchemaName::NAME, a_TableName::NAME,a_Mode::VARCHAR(10)) tic; END $BODY$ LANGUAGE plpgsql; COMMENT ON FUNCTION admtf_Table_InheritanceChildrens(a_SchemaName VARCHAR(256),a_TableName VARCHAR(256),a_Mode VARCHAR(10)) IS '    '; --ROLLBACK TRANSACTION; COMMIT TRANSACTION; SELECT * FROM admtf_Table_InheritanceChildrens('public'::NAME,'np_house'::NAME); SELECT * FROM admtf_Table_InheritanceChildrens('public'::VARCHAR(256),'np_house'::VARCHAR(256)); 


admtf_Attribute_PKFeatures


.
 BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admtf_Attribute_PKFeatures (a_TableOID OID,a_AttributeNo SMALLINT); /***************************************************************************/ /*        . */ /*   ,          */ /*   */ /***************************************************************************/ CREATE OR REPLACE FUNCTION admtf_Attribute_PKFeatures (a_TableOID OID, /*   */ a_AttributeNo SMALLINT /*     */ ) RETURNS TABLE (rs_isAttributePK BOOLEAN,rs_PKeyName name,rs_ColumnPKNo SMALLINT) AS $BODY$ DECLARE C_PKAttributeList_NDims CONSTANT INTEGER:=1; /*     */ v_PKAttributeList SMALLINT[]; /*       */ v_PKAttributeIndx INTEGER; /*      */ v_PKAttributeLBound INTEGER; /*      */ v_PKAttributeUBound INTEGER; /*      */ --********************************************************************** BEGIN rs_isAttributePK:=false; rs_ColumnPKNo:=NULL; SELECT INTO rs_PKeyName,v_PKAttributeList,rs_isAttributePK conname,conkey,ARRAY[a_AttributeNo]<@conkey FROM pg_constraint c WHERE c.contype='p' and c.conrelid=a_TableOID; IF FOUND AND rs_isAttributePK THEN --      v_PKAttributeLBound:=array_lower(v_PKAttributeList,C_PKAttributeList_NDims); v_PKAttributeUBound:=array_upper(v_PKAttributeList,C_PKAttributeList_NDims); v_PKAttributeIndx:=v_PKAttributeLBound; WHILE v_PKAttributeIndx <= v_PKAttributeUBound AND a_AttributeNo<>v_PKAttributeList[v_PKAttributeIndx] LOOP v_PKAttributeIndx:=v_PKAttributeIndx+1; END LOOP; IF v_PKAttributeIndx<=v_PKAttributeUBound THEN rs_ColumnPKNo:=v_PKAttributeIndx; END IF; END IF; RETURN QUERY SELECT rs_isAttributePK,rs_PKeyName,rs_ColumnPKNo; END $BODY$ LANGUAGE plpgsql; COMMENT ON FUNCTION admtf_Attribute_PKFeatures(a_TableOID OID,a_AttributeNo SMALLINT) IS '              '; --ROLLBACK TRANSACTION; COMMIT TRANSACTION; SELECT * FROM admtf_Attribute_PKFeatures((SELECT OID FROM pg_class WHERE relname='street'),3::SMALLINT); 


admtf_Attribute_FKFeatures


.
 BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admtf_Attribute_FKFeatures (a_TableOID OID,a_AttributeNo SMALLINT); /****************************************************************************/ /*        . */ /*   ,         */ /*   . */ /****************************************************************************/ /****************************************************************************/ CREATE OR REPLACE FUNCTION admtf_Attribute_FKFeatures (a_TableOID OID, /*   */ a_AttributeNo SMALLINT /*     */ ) RETURNS TABLE (rs_isAttributeFK BOOLEAN,rs_FKeyName name[],rs_ColumnFKNo SMALLINT[],rs_FKTableName name[],rs_FKTableColumnName name[]) AS $BODY$ DECLARE C_FKAttributeList_NDims CONSTANT INTEGER:=1; /*     */ v_FKAttributeList SMALLINT[]; /*       */ v_RefAttributeList SMALLINT[]; /*     , */ /*     */ v_FKAttributeIndx INTEGER; /*      */ v_RefAttributeListIndx INTEGER; /*     , */ /*     */ v_FKAttributeLBound INTEGER; /*      */ v_FKAttributeUBound INTEGER; /*      */ v_FKConstraintIndx INTEGER; /*     */ v_FKeyName name; /*   , */ /*     */ v_FKTableName name; /*  ,     */ v_FKTableColumnName name; /*    , */ /*     */ v_RefAttributeNo SMALLINT; /*     , */ /*     */ v_Constraint pg_constraint%ROWTYPE; /*     */ /*  (CONSTRANT) */ --****************************************************************************************************** BEGIN rs_isAttributeFK:=false; rs_ColumnFKNo:=NULL; v_FKConstraintIndx:=0; FOR v_Constraint IN SELECT * FROM pg_constraint c WHERE c.contype='f' and c.conrelid=a_TableOID AND ARRAY[a_AttributeNo]<@conkey ORDER BY c.oid LOOP v_FKConstraintIndx:=v_FKConstraintIndx+1; rs_isAttributeFK:=true; v_FKeyName:=v_Constraint.conname; v_FKAttributeList:=v_Constraint.conkey; v_RefAttributeList:=v_Constraint.confkey; v_FKAttributeLBound:=array_lower(v_FKAttributeList,C_FKAttributeList_NDims); v_FKAttributeUBound:=array_upper(v_FKAttributeList,C_FKAttributeList_NDims); v_FKAttributeIndx:=v_FKAttributeLBound; WHILE v_FKAttributeIndx <= v_FKAttributeUBound AND a_AttributeNo<>v_FKAttributeList[v_FKAttributeIndx] LOOP v_FKAttributeIndx:=v_FKAttributeIndx+1; END LOOP; rs_FKeyName[v_FKConstraintIndx]:=v_FKeyName; rs_ColumnFKNo[v_FKConstraintIndx]:=v_FKAttributeIndx; SELECT INTO v_FKTableName ftbl.relname FROM pg_class ftbl WHERE ftbl.oid=v_Constraint.confrelid; rs_FKTableName[v_FKConstraintIndx]:=v_FKTableName; v_RefAttributeNo:=v_RefAttributeList[v_FKAttributeIndx]; v_FKTableColumnName:=NULL; SELECT INTO v_FKTableColumnName attname FROM pg_attribute a WHERE a.attrelid=v_Constraint.confrelid AND a.attnum=v_RefAttributeNo; rs_FKTableColumnName[v_FKConstraintIndx]:=v_FKTableColumnName; END LOOP; RETURN QUERY SELECT rs_isAttributeFK,rs_FKeyName,rs_ColumnFKNo, rs_FKTableName,rs_FKTableColumnName; END $BODY$ LANGUAGE plpgsql; COMMENT ON FUNCTION admtf_Attribute_FKFeatures(a_TableOID OID,a_AttributeNo SMALLINT) IS '              '; --ROLLBACK TRANSACTION; COMMIT TRANSACTION; SELECT * FROM admtf_Attribute_FKFeatures((SELECT OID FROM pg_class WHERE relname='street'),4::SMALLINT); 



admtf_Attribute_Features


.
 BEGIN TRANSACTION; DROP FUNCTION IF EXISTS admtf_Attribute_Features (a_TableOID OID,a_AttributeNo SMALLINT); /****************************************************************************/ /*      */ /****************************************************************************/ CREATE OR REPLACE FUNCTION admtf_Attribute_Features (a_TableOID OID, /*   */ a_AttributeNo SMALLINT/*     */ ) RETURNS TABLE (rsa_AttributeName name,rsa_UserTypeName VARCHAR(256),rsa_TypeName VARCHAR(256),rsa_isNotNULL BOOLEAN,rsa_isAttributePK BOOLEAN, rsa_ColumnPKNo SMALLINT,rsa_Description Text,rsa_isAttributeFK BOOLEAN,rsa_FKeyName name[],rsa_ColumnFKNo SMALLINT[],rsa_FKTableName name[],rsa_FKTableColumnName name[]) AS $BODY$ DECLARE v_Return_Error Integer := 0; /*  */ --********************************************************************* BEGIN SELECT INTO rsa_AttributeName,rsa_UserTypeName,rsa_TypeName, rsa_isNotNULL,rsa_Description attr.attname, CASE WHEN COALESCE(typ.typbasetype,0)>0 THEN typ.typname::VARCHAR(100) ELSE ''END AS r_UserTypeName, FORMAT_TYPE(COALESCE(NULLIF(typ.typbasetype,0),typ.oid), COALESCE(NULLIF(typ.typtypmod,-1),attr.atttypmod))::VARCHAR(256) AS r_TypeName, attr.attnotnull AS r_isNotNULL, dsc.description AS r_Description FROM pg_attribute attr 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 attr.attrelid =a_TableOID AND attr.attnum=a_AttributeNo; SELECT INTO rsa_isAttributePK,rsa_ColumnPKNo rs_isAttributePK,rs_ColumnPKNo FROM admtf_Attribute_PKFeatures(a_TableOID,a_AttributeNo); SELECT INTO rsa_isAttributeFK,rsa_FKeyName,rsa_ColumnFKNo,rsa_FKTableName, rsa_FKTableColumnName rs_isAttributeFK,rs_FKeyName, rs_ColumnFKNo,rs_FKTableName,rs_FKTableColumnName FROM admtf_Attribute_FKFeatures(a_TableOID,a_AttributeNo); RETURN QUERY SELECT rsa_AttributeName,rsa_UserTypeName,rsa_TypeName,rsa_isNotNULL, rsa_isAttributePK,rsa_ColumnPKNo,rsa_Description,rsa_isAttributeFK, rsa_FKeyName,rsa_ColumnFKNo,rsa_FKTableName,rsa_FKTableColumnName; END $BODY$ LANGUAGE plpgsql; COMMENT ON FUNCTION admtf_Attribute_Features(a_TableOID OID,a_AttributeNo SMALLINT) IS '   '; --ROLLBACK TRANSACTION; COMMIT TRANSACTION; SELECT * FROM admtf_Attribute_Features ((SELECT OID FROM pg_class WHERE relname='street'),2::SMALLINT); 



PostgreSQL. ;
PostgreSQL. .
PostgreSQL. ( ) .

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


All Articles