αž€αžΆαžšαžŸαž·αž€αŸ’αžŸαžΆαž’αŸ†αž–αžΈαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž’αžΆαž‡αžΈαžœαž€αž˜αŸ’αž˜αž“αŸ…αž€αž˜αŸ’αžšαž·αžαž“αŸƒαž˜αž»αžαž„αžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€ PostgreSQL

αž€αž˜αŸ’αž›αžΆαŸ†αž„αžšαž»αž‰αž…αŸ’αžšαžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŸαžšαžŸαŸαžšαž‚αŸ†αž“αžΌαžšαž–αŸ’αžšαžΆαž„αž“αŸαŸ‡αž‚αžΊαž’αžαŸ’αžαž”αž‘ "αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αžŠαžΆαž€αŸ‹αž±αŸ’αž™αž“αŸ…αžŠαžΆαž…αŸ‹αž–αžΈαž‚αŸ αž”αž“αŸ’αž‘αž»αž€αž€αžΆαžšαž„αžΆαžšαž”αžΆαž“αž€αžΎαž“αž‘αžΎαž„ 5 αžŠαž„ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž”αžΆαž“αžαŸ’αžšαŸ€αž˜αžαŸ’αž›αž½αž“αžšαž½αž…αžšαžΆαž›αŸ‹αž αžΎαž™" αŸ” αžšαž”αŸ€αž”αžŠαŸ‚αž› Lingualeo αž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ… PostgreSQL αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ 23 αž›αžΆαž“αž“αžΆαž€αŸ‹. αžαŸ’αž‰αž»αŸ†αž€αŸαž”αžΆαž“αžšαž€αžƒαžΎαž‰αž’αžαŸ’αžαž”αž‘αžŠαŸ‚αž›αž”αžΆαž“αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž€αžΆαž›αž–αžΈ 4 αž†αŸ’αž“αžΆαŸ†αž˜αž»αž“αž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž•αž„αžŠαŸ‚αžš - αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž’αžΆαž‡αžΈαžœαž€αž˜αŸ’αž˜αž“αŸ…αž€αŸ’αž“αž»αž„ MySQL.

αžœαžΆαž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžŠαŸ‚αž›αž‚αŸ†αž“αž·αžαžŠαžΌαž…αž‚αŸ’αž“αžΆ - "αž’αž“αž»αžœαžαŸ’αžαžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž’αžΆαž‡αžΈαžœαž€αž˜αŸ’αž˜αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™".

αž€αžΆαžšαžŸαž·αž€αŸ’αžŸαžΆαž’αŸ†αž–αžΈαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž’αžΆαž‡αžΈαžœαž€αž˜αŸ’αž˜αž“αŸ…αž€αž˜αŸ’αžšαž·αžαž“αŸƒαž˜αž»αžαž„αžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€ PostgreSQL

αžœαžΆβ€‹αž˜αž·αž“β€‹αž˜αŸ‚αž“β€‹αž˜αžΆαž“β€‹αžαŸ‚β€‹αžαŸ’αž‰αž»αŸ†β€‹αž‘αŸβ€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αž‚αž·αžαŸ”

αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸαŸ‡αž•αž„αžŠαŸ‚αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαž›αž’αž“αžΆαž‚αž αžαŸ’αž‰αž»αŸ†αž…αž„αŸ‹αž’αž—αž·αžšαž€αŸ’αžŸ αž‡αžΆαžŠαŸ†αž”αžΌαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž›αž½αž“αžαŸ’αž‰αž»αŸ†αž•αŸ’αž‘αžΆαž›αŸ‹ αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžŠαŸ‚αž›αž”αžΆαž“αž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αž’αž“αž»αžœαžαŸ’αžαŸ” αž‡αžΆαž–αž·αžŸαŸαžŸαžŠαŸ„αž™αž–αž·αž…αžΆαžšαžŽαžΆαžαžΆαžαŸ’αž˜αžΈαŸ—αž“αŸαŸ‡αž€αžΆαžšαžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž‡αžΆαž™αž»αž‘αŸ’αž’αžŸαžΆαžŸαŸ’αžšαŸ’αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž‘αžΎαž„αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αž“αž·αž„αž•αŸ’αž‘αŸαžšαžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž’αžΆαž‡αžΈαžœαž€αž˜αŸ’αž˜αž‘αŸ…αž€αž˜αŸ’αžšαž·αžαžαžΆαž„αž€αŸ’αžšαŸ„αž™αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž’αŸ’αžœαžΈαŸ—β€‹αžŠαŸ‚αž›β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αž„αŸ’αž€αžΎαžβ€‹αž‘αžΎαž„β€‹αž“αžΉαž„β€‹αž˜αž·αž“β€‹αž˜αžΆαž“β€‹αž”αŸ’αžšαž™αŸ„αž‡αž“αŸβ€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αž’αŸ’αž“αž€β€‹αžŽαžΆβ€‹αž˜αŸ’αž“αžΆαž€αŸ‹β€‹αž‘αžΎαž™ αž αžΎαž™β€‹αž“αžΉαž„β€‹αž˜αž·αž“β€‹αž˜αžΆαž“β€‹αž”αŸ’αžšαž™αŸ„αž‡αž“αŸβ€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αž’αŸ’αž“αž€β€‹αžŽαžΆβ€‹αž˜αŸ’αž“αžΆαž€αŸ‹β€‹αž‘αžΎαž™αŸ”

αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžŠαŸ‚αž›αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž€αžΆαžšαžšαž€αžƒαžΎαž‰ αž¬αž–αž·αžŸαŸαžŸαž“αŸ„αŸ‡αž‘αŸαŸ” αžŠαžΉαž„αž–αžΈαžšαž”αŸ€αž”αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž‚αžΊαž”αž»αžšαžΆαžŽ αž αžΎαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαž„ (αž§αž‘αžΆαž αžšαžŽαŸ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αŸ’αžšαžΎαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž€αžΆαž›αž–αžΈ 20 αž†αŸ’αž“αžΆαŸ†αž˜αž»αž“αž“αŸ…αž›αžΎ Oracle)αŸ” αžαŸ’αž‰αž»αŸ†αž‘αžΎαž”αžαŸ‚αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž”αŸ’αžšαž˜αžΌαž›αž’αŸ’αžœαžΈαŸ—αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αžαŸ‚αž˜αž½αž™αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŠαŸ‚αž›αžœαžΆαž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αŸ” αžŠαžΌαž…αžŠαŸ‚αž›αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰ αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž‚αŸ†αž“αž·αžαžŠαžΌαž…αž‚αŸ’αž“αžΆαž€αžΎαžαž˜αžΆαž“αž…αŸ†αž–αŸ„αŸ‡αž˜αž“αž»αžŸαŸ’αžŸαž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆαžŠαŸ„αž™αž―αž€αžšαžΆαž‡αŸ’αž™αŸ” αž αžΎαž™αžœαžΆαž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαž€αŸ’αžŸαžΆαžœαžΆαž‘αž»αž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž›αž½αž“αž’αŸ’αž“αž€αž‡αžΆαžœαžαŸ’αžαž»αž’αž“αž»αžŸαŸ’αžŸαžΆαžœαžšαžΈαž™αŸαŸ”

αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹ αž‚αŸ’αž˜αžΆαž“αž’αŸ’αžœαžΈαž“αŸ…αž›αžΎαž›αŸ„αž€αž“αŸαŸ‡αž›αŸ’αž’αž₯αžαžαŸ’αž…αŸ„αŸ‡αž“αŸ„αŸ‡αž‘αŸ αž€αŸ†αž αž»αžŸ αž“αž·αž„αž€αžΆαžšαžœαžΆαž™αž’αž€αŸ’αžŸαžšαž‡αžΆαž’αž€αž»αžŸαž›αž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“αŸ” αž€αžΆαžšαžšαž·αŸ‡αž‚αž“αŸ‹ αž“αž·αž„αž˜αžαž·αž™αŸ„αž”αž›αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαŸ’αžœαžΆαž‚αž˜αž“αŸαž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„ αž“αž·αž„αžšαŸ†αž–αžΉαž„αž‘αž»αž€αŸ” αž αžΎαž™αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαžαžΌαž…αž˜αž½αž™αž‘αŸ€αž - αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αž»αž”αž…αŸ„αž›αŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž“αŸ…αžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž“αŸ…αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„αž€αžΆαžšαž„αžΆαžšαž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡β€‹αž’αžαŸ’αžαž”αž‘β€‹αž“αŸαŸ‡β€‹αž‚αŸ’αžšαžΆαž“αŸ‹β€‹αžαŸ‚β€‹αž‡αžΆβ€‹αž‚αŸ†αž“αžΌαžŸβ€‹αž–αŸ’αžšαžΆαž„β€‹αž“αž·αž„β€‹αž€αžΆαžšβ€‹αž–αž·αž–αžŽαŸŒαž“αžΆβ€‹αž’αŸ†αž–αžΈβ€‹αž‚αŸ„αž›β€‹αž‚αŸ†αž“αž·αžβ€‹αž‘αžΌαž‘αŸ…β€‹αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡β€‹αž˜αž·αž“β€‹αž˜αžΆαž“β€‹αž’αŸ’αžœαžΈβ€‹αž…αŸ’αžšαžΎαž“β€‹αž‘αŸαŸ” αžαŸ’αž‰αž»αŸ†αžŸαž„αŸ’αžƒαžΉαž˜αžαžΆαž˜αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž™αž›αŸ‹αž–αžΈαžšαžΌαž”αž—αžΆαž–αžšαž½αž˜αŸ”

αž‚αŸ†αž“αž·αžαž‘αžΌαž‘αŸ…αž‚αžΊ "αž”αŸ‚αž„αž…αŸ‚αž€ αž“αž·αž„αž™αž€αžˆαŸ’αž“αŸ‡ αž›αžΆαž€αŸ‹ αž“αž·αž„αž‡αžΆαž˜αŸ’αž…αžΆαžŸαŸ‹"

αž‚αŸ†αž“αž·αžαž‚αžΊαž”αž»αžšαžΆαžŽ - αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαžΆαžšαžΆαž„ αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αž»αžαž„αžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αŸ”
αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαž˜αž·αž“αž˜αžΆαž“αžŸαž·αž‘αŸ’αž’αž·αž…αžΌαž›αž”αŸ’αžšαžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž‘αŸαŸ” αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž’αžΆαž…αž’αŸ’αžœαžΎαž”αžΆαž“αž‚αžΊαž αŸ…αž˜αž»αžαž„αžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž αžΎαž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αžŠαŸ‚αž›αž‘αž‘αž½αž›αž”αžΆαž“αŸ”

αžαž½αž“αžΆαž‘αžΈ

CREATE ROLE store;

CREATE ROLE sys_functions;

CREATE ROLE loc_audit_functions;

CREATE ROLE service_functions;

CREATE ROLE business_functions;

αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸ

αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž•αŸ’αž‘αž»αž€αžαžΆαžšαžΆαž„

αžαžΆαžšαžΆαž„αž‚αŸ„αž›αžŠαŸ…αžŠαŸ‚αž›αž’αž“αž»αžœαžαŸ’αžαž’αž„αŸ’αž‚αž—αžΆαž–αž”αŸ’αžšαž’αžΆαž“αž”αž‘αŸ”

CREATE SCHEMA store AUTHORIZATION store ;

αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αž˜αž»αžαž„αžΆαžšαž”αŸ’αžšαž–αŸαž“αŸ’αž’

αž˜αž»αžαž„αžΆαžšαž”αŸ’αžšαž–αŸαž“αŸ’αž’ αž‡αžΆαž–αž·αžŸαŸαžŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžαžΆαžšαžΆαž„αž€αžαŸ‹αžαŸ’αžšαžΆαŸ”

CREATE SCHEMA sys_functions AUTHORIZATION sys_functions ;

αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžŸαžœαž“αž€αž˜αŸ’αž˜αž€αŸ’αž“αž»αž„αžŸαŸ’αžšαž»αž€

αž˜αž»αžαž„αžΆαžš αž“αž·αž„αžαžΆαžšαžΆαž„αžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αžαžŸαžœαž“αž€αž˜αŸ’αž˜αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž˜αž»αžαž„αžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€ αž“αž·αž„αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžαžΆαžšαžΆαž„αž‚αŸ„αž›αžŠαŸ…αŸ”

CREATE SCHEMA loc_audit_functions AUTHORIZATION loc_audit_functions;

αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αž˜αž»αžαž„αžΆαžšαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜

αž˜αž»αžαž„αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ αž“αž·αž„αž˜αž»αžαž„αžΆαžš DMLαŸ”

CREATE SCHEMA service_functions AUTHORIZATION service_functions;

αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αž˜αž»αžαž„αžΆαžšαž’αžΆαž‡αžΈαžœαž€αž˜αŸ’αž˜

αž˜αž»αžαž„αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αž»αžαž„αžΆαžšαž’αžΆαž‡αžΈαžœαž€αž˜αŸ’αž˜αž…αž»αž„αž€αŸ’αžšαŸ„αž™ αž αŸ…αžŠαŸ„αž™αž’αžαž·αžαž·αž‡αž“αŸ”

CREATE SCHEMA business_functions AUTHORIZATION business_functions;

αžŸαž·αž‘αŸ’αž’αž·αž‘αž‘αž½αž›αž”αžΆαž“

αžαž½αž“αžΆαž‘αžΈ - αžŠαžΆαž”αžΆ αž˜αžΆαž“αžŸαž·αž‘αŸ’αž’αž·αž…αžΌαž›αž”αŸ’αžšαžΎαž–αŸαž‰αž›αŸαž‰αž…αŸ†αž–αŸ„αŸ‡αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹ (αž”αŸ†αž”αŸ‚αž€αž…αŸαž‰αž–αžΈαžαž½αž“αžΆαž‘αžΈαž˜αŸ’αž…αžΆαžŸαŸ‹ DB) αŸ”

CREATE ROLE dba_role;
GRANT store TO dba_role;
GRANT sys_functions TO dba_role;
GRANT loc_audit_functions TO dba_role;
GRANT service_functions TO dba_role;
GRANT business_functions TO dba_role;

αžαž½αž“αžΆαž‘αžΈ - αž’αŸ’αž“αž€β€‹αž”αŸ’αžšαžΎ αž˜αžΆαž“αž―αž€αžŸαž·αž‘αŸ’αž’αž· αž…αž”αŸ‹ αž“αŸ…αž€αŸ’αž“αž»αž„αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜ business_functions.

CREATE ROLE user_role;

αžŸαž·αž‘αŸ’αž’αž·αžšαžœαžΆαž„αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸ

αž αŸ’αž‚αŸ’αžšαŸαž“
αžŠαŸ„αž™αžŸαžΆαžšαž˜αž»αžαž„αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžŠαŸ„αž™αž‚αž»αžŽαž›αž€αŸ’αžαžŽαŸˆ αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž– αžαŸ’αžšαžΌαžœαž€αžΆαžšαž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ† αž›αž»αž”αž…αŸ„αž›αž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž›αžΎαž˜αž»αžαž„αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹... αž–αžΈαžŸαžΆαž’αžΆαžšαžŽαŸˆαž‡αž“;

REVOKE EXECUTE ON ALL FUNCTION IN SCHEMA sys_functions FROM public ; 
REVOKE EXECUTE ON ALL FUNCTION IN SCHEMA  loc_audit_functions  FROM public ; 
REVOKE EXECUTE ON ALL FUNCTION IN SCHEMA  service_functions FROM public ; 
REVOKE EXECUTE ON ALL FUNCTION IN SCHEMA  business_functions FROM public ; 

GRANT USAGE ON SCHEMA sys_functions TO dba_role ; 
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA sys_functions TO dba_role ;
GRANT USAGE ON SCHEMA loc_audit_functions  TO dba_role ; 
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA loc_audit_functions  TO dba_role ;
GRANT USAGE ON SCHEMA service_functions TO dba_role ; 
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA service_functions TO dba_role ;
GRANT USAGE ON SCHEMA business_functions TO dba_role ; 
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA business_functions TO dba_role ;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA business_functions TO user_role ;

GRANT ALL PRIVILEGES ON SCHEMA store TO GROUP business_functions ;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA store TO business_functions ;
GRANT USAGE ON ALL SEQUENCES IN SCHEMA store TO business_functions ;

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‚αžΊαžšαž½αž…αžšαžΆαž›αŸ‹αŸ” αž’αŸ’αž“αž€αž’αžΆαž…αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αŸ†αž–αŸαž‰αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ”

αžαžΆαžšαžΆαž„αž‚αŸ„αž›αžŠαŸ…

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžαžΆαžšαžΆαž„αž‚αžΊαž‡αžΆαžšαžΏαž„αžαžΌαž…αžαžΆαž…αŸ” αž˜αž·αž“αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž‘αŸαž›αžΎαž€αž›αŸ‚αž„αžαŸ‚αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž˜αž·αž“αž”αŸ’αžšαžΎ ស៊េរី αž“αž·αž„αž”αž„αŸ’αž€αžΎαžαž›αŸ†αžŠαžΆαž”αŸ‹αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αŸ” αž”αžΌαž€αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αžαž·αž”αžšαž˜αžΆαž“αŸƒαž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†

COMMENT ON ...

αž˜αžαž·αž™αŸ„αž”αž›αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ всСх αžœαžαŸ’αžαž»αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αŸ”

αžŸαžœαž“αž€αž˜αŸ’αž˜αž€αŸ’αž“αž»αž„αžŸαŸ’αžšαž»αž€

αžŠαžΎαž˜αŸ’αž”αžΈαž€αžαŸ‹αžαŸ’αžšαžΆαž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž˜αž»αžαž„αžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€ αž“αž·αž„αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ…αž€αžΆαž“αŸ‹αžαžΆαžšαžΆαž„αž‚αŸ„αž›αžŠαŸ… αžαžΆαžšαžΆαž„αžŸαžœαž“αž€αž˜αŸ’αž˜αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎ αžŠαŸ‚αž›αžšαž½αž˜αž˜αžΆαž“ αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαž“αŸƒαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœ αžŸαŸ’αž›αžΆαž€αž“αŸƒαž˜αŸ‰αžΌαžŒαž»αž›αžŠαŸ‚αž›αž αŸ…αžαžΆ αž“αž·αž„αžαž˜αŸ’αž›αŸƒαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αž“αŸƒαž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž› αž“αž·αž„ αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž›αž‘αŸ’αž’αž•αž›αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹ JSON αŸ”

αž˜αž»αžαž„αžΆαžšαž”αŸ’αžšαž–αŸαž“αŸ’αž’

αžšαž…αž“αžΆαž‘αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž‚αŸ„αž›αžŠαŸ…αŸ” αž–αž½αž€αžœαžΆαž‡αžΆαž˜αž»αžαž„αžΆαžšαž€αŸαŸ‡αŸ”

αž‚αŸ†αžšαžΌ - αž˜αž»αžαž„αžΆαžšαž”αŸ’αžšαž–αŸαž“αŸ’αž’

---------------------------------------------------------
-- INSERT
CREATE OR REPLACE FUNCTION sys_functions.table_insert_log ()
RETURNS TRIGGER AS $$
BEGIN
  PERFORM loc_audit_functions.make_log( ' '||'table' , 'insert' , json_build_object('id', NEW.id)  );
  RETURN NULL ;
END
$$ LANGUAGE plpgsql SECURITY DEFINER;

CREATE TRIGGER table_after_insert AFTER INSERT ON storage.table FOR EACH ROW EXECUTE PROCEDURE sys_functions.table_insert_log();

---------------------------------------------------------
-- UPDATE
CREATE OR REPLACE FUNCTION sys_functions.table_update_log ()
RETURNS TRIGGER AS $$
BEGIN
  IF OLD.column != NEW.column
  THEN
    PERFORM loc_audit_functions.make_log( ' '||'table' , 'update' , json_build_object('OLD.column', OLD.column , 'NEW.column' , NEW.column )  );
  END IF ;
  RETURN NULL ;
END
$$ LANGUAGE plpgsql SECURITY DEFINER;

CREATE TRIGGER table_after_update AFTER UPDATE ON storage.table FOR EACH ROW EXECUTE PROCEDURE sys_functions.table_update_log ();

---------------------------------------------------------
-- DELETE
CREATE OR REPLACE FUNCTION sys_functions.table_delete_log ()
RETURNS TRIGGER AS $$
BEGIN
  PERFORM loc_audit_functions.make_log( ' '||'table' , 'delete' , json_build_object('id', OLD.id )  );
  RETURN NULL ;
END
$$ LANGUAGE plpgsql SECURITY DEFINER;

CREATE TRIGGER table_after_delete AFTER DELETE ON storage.table FOR EACH ROW EXECUTE PROCEDURE sys_functions.table_delete_log ();

αž˜αž»αžαž„αžΆαžšαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜

αžšαž…αž“αžΆαž‘αžΎαž„αžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αžαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ αž“αž·αž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš DML αž“αŸ…αž›αžΎαžαžΆαžšαžΆαž„αž‚αŸ„αž›αžŠαŸ…αŸ”

αž‚αŸ†αžšαžΌ - αž˜αž»αžαž„αžΆαžšαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜

--INSERT
--RETURN id OF NEW ROW
CREATE OR REPLACE FUNCTION service_functions.table_insert ( new_column store.table.column%TYPE )
RETURNS integer AS $$
DECLARE
  new_id integer ;
BEGIN
  -- Generate new id
  new_id = nextval('store.table.seq');

  -- Insert into table
  INSERT INTO store.table
  ( 
    id ,
    column
   )
  VALUES
  (
   new_id ,
   new_column
   );

RETURN new_id ;
END
$$ LANGUAGE plpgsql SECURITY DEFINER;

--DELETE
--RETURN ROW NUMBERS DELETED
CREATE OR REPLACE FUNCTION service_functions.table_delete ( current_id integer ) 
RETURNS integer AS $$
DECLARE
  rows_count integer  ;    
BEGIN
  DELETE FROM store.table WHERE id = current_id; 

  GET DIAGNOSTICS rows_count = ROW_COUNT;                                                                           

  RETURN rows_count ;
END
$$ LANGUAGE plpgsql SECURITY DEFINER;
 
-- UPDATE DETAILS
-- RETURN ROW NUMBERS UPDATED
CREATE OR REPLACE FUNCTION service_functions.table_update_column 
(
  current_id integer 
  ,new_column store.table.column%TYPE
) 
RETURNS integer AS $$
DECLARE
  rows_count integer  ; 
BEGIN
  UPDATE  store.table
  SET
    column = new_column
  WHERE id = current_id;

  GET DIAGNOSTICS rows_count = ROW_COUNT;                                                                           

  RETURN rows_count ;
END
$$ LANGUAGE plpgsql SECURITY DEFINER;

αž˜αž»αžαž„αžΆαžšαž’αžΆαž‡αžΈαžœαž€αž˜αŸ’αž˜

αžšαž…αž“αžΆαž‘αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αž»αžαž„αžΆαžšαž’αžΆαž‡αžΈαžœαž€αž˜αŸ’αž˜αž…αž»αž„αž€αŸ’αžšαŸ„αž™ αž αŸ…αžŠαŸ„αž™αž’αžαž·αžαž·αž‡αž“αŸ” αž–αž½αž€αž‚αŸαžαŸ‚αž„αžαŸ‚αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰ - JSON. αžŠαžΎαž˜αŸ’αž”αžΈαžŸαŸ’αž‘αžΆαž€αŸ‹αž…αžΆαž”αŸ‹ αž“αž·αž„αž€αžαŸ‹αžαŸ’αžšαžΆαž€αŸ†αž αž»αžŸαž€αŸ’αž“αž»αž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αžŸαžΌαž˜αž”αŸ’αžšαžΎαž”αŸ’αž›αž»αž€ αž€αžšαžŽαžΈβ€‹αž›αžΎαž€αž›αŸ‚αž„.

αž‚αŸ†αžšαžΌ - αž˜αž»αžαž„αžΆαžšαž’αžΆαž‡αžΈαžœαž€αž˜αŸ’αž˜

CREATE OR REPLACE FUNCTION business_functions.business_function_template(
--Input parameters        
 )
RETURNS JSON AS $$
DECLARE
  ------------------------
  --for exception catching
  error_message text ;
  error_json json ;
  result json ;
  ------------------------ 
BEGIN
--LOGGING
  PERFORM loc_audit_functions.make_log
  (
    'business_function_template',
    'STARTED',
    json_build_object
    (
	--IN Parameters
    ) 
   );

  PERFORM business_functions.notice('business_function_template');            

  --START BUSINESS PART
  --END BUSINESS PART

  -- SUCCESFULLY RESULT
  PERFORM business_functions.notice('result');
  PERFORM business_functions.notice(result);

  PERFORM loc_audit_functions.make_log
  (
    'business_function_template',
    'FINISHED', 
    json_build_object( 'result',result )
  );

  RETURN result ;
----------------------------------------------------------------------------------------------------------
-- EXCEPTION CATCHING
EXCEPTION                        
  WHEN OTHERS THEN    
    PERFORM loc_audit_functions.make_log
    (
      'business_function_template',
      'STARTED',
      json_build_object
      (
	--IN Parameters	
      ) , TRUE );

     PERFORM loc_audit_functions.make_log
     (
       'business_function_template',
       ' ERROR',
       json_build_object('SQLSTATE',SQLSTATE ), TRUE 
     );

     PERFORM loc_audit_functions.make_log
     (
       'business_function_template',
       ' ERROR',
       json_build_object('SQLERRM',SQLERRM  ), TRUE 
      );

     GET STACKED DIAGNOSTICS error_message = RETURNED_SQLSTATE ;
     PERFORM loc_audit_functions.make_log
     (
      'business_function_template',
      ' ERROR-RETURNED_SQLSTATE',json_build_object('RETURNED_SQLSTATE',error_message  ), TRUE );

     GET STACKED DIAGNOSTICS error_message = COLUMN_NAME ;
     PERFORM loc_audit_functions.make_log
     (
       'business_function_template',
       ' ERROR-COLUMN_NAME',
       json_build_object('COLUMN_NAME',error_message  ), TRUE );

     GET STACKED DIAGNOSTICS error_message = CONSTRAINT_NAME ;
     PERFORM loc_audit_functions.make_log
     (
      'business_function_template',
      ' ERROR-CONSTRAINT_NAME',
      json_build_object('CONSTRAINT_NAME',error_message  ), TRUE );

     GET STACKED DIAGNOSTICS error_message = PG_DATATYPE_NAME ;
     PERFORM loc_audit_functions.make_log
     (
       'business_function_template',
       ' ERROR-PG_DATATYPE_NAME',
       json_build_object('PG_DATATYPE_NAME',error_message  ), TRUE );

     GET STACKED DIAGNOSTICS error_message = MESSAGE_TEXT ;
     PERFORM loc_audit_functions.make_log
     (
       'business_function_template',
       ' ERROR-MESSAGE_TEXT',json_build_object('MESSAGE_TEXT',error_message  ), TRUE );

     GET STACKED DIAGNOSTICS error_message = SCHEMA_NAME ;
     PERFORM loc_audit_functions.make_log
     (s
       'business_function_template',
       ' ERROR-SCHEMA_NAME',json_build_object('SCHEMA_NAME',error_message  ), TRUE );

     GET STACKED DIAGNOSTICS error_message = PG_EXCEPTION_DETAIL ;
     PERFORM loc_audit_functions.make_log
     (
      'business_function_template',
      ' ERROR-PG_EXCEPTION_DETAIL',
      json_build_object('PG_EXCEPTION_DETAIL',error_message  ), TRUE );

     GET STACKED DIAGNOSTICS error_message = PG_EXCEPTION_HINT ;
     PERFORM loc_audit_functions.make_log
     (
       'business_function_template',
       ' ERROR-PG_EXCEPTION_HINT',json_build_object('PG_EXCEPTION_HINT',error_message  ), TRUE );

     GET STACKED DIAGNOSTICS error_message = PG_EXCEPTION_CONTEXT ;
     PERFORM loc_audit_functions.make_log
     (
      'business_function_template',
      ' ERROR-PG_EXCEPTION_CONTEXT',json_build_object('PG_EXCEPTION_CONTEXT',error_message  ), TRUE );                                      

    RAISE WARNING 'ALARM: %' , SQLERRM ;

    SELECT json_build_object
    (
      'isError' , TRUE ,
      'errorMsg' , SQLERRM
     ) INTO error_json ;

  RETURN  error_json ;
END
$$ LANGUAGE plpgsql SECURITY DEFINER;

αž›αž‘αŸ’αž’αž•αž›

αžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž–αžŽαŸŒαž“αžΆαžšαžΌαž”αž—αžΆαž–αž‘αžΌαž‘αŸ… αžαŸ’αž‰αž»αŸ†αž‚αž·αžαžαžΆαžœαžΆαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αž αžΎαž™αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž›αžΎαž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αž αž“αž·αž„αž›αž‘αŸ’αž’αž•αž› αžŸαžΌαž˜αžŸαžšαžŸαŸαžšαž˜αžαž·αž™αŸ„αž”αž›αŸ‹ αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αžšαžΈαž€αžšαžΆαž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαž”αŸ‰αŸ‡αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αž›αžΎαžšαžΌαž”αž—αžΆαž–αŸ”

PS

αž€αžΆαžšαž€αžαŸ‹αžαŸ’αžšαžΆαž€αŸ†αž αž»αžŸαžŸαžΆαž˜αž‰αŸ’αž‰ - αž”αŸ’αžšαž—αŸαž‘αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž”αž‰αŸ’αž…αžΌαž›

-[ RECORD 1 ]-
date_trunc      | 2020-08-19 13:15:46
id              | 1072
usename         | emp1
log_module      | addKD
log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a
status          | STARTED
jsonb_pretty    | {
                |     "dko": {
                |         "id": 4,
                |         "type": "Type1",                                                                                                                                                                                            
                |         "title": "CREATED BY addKD",
                |         "Weight": 10,
                |         "Tr": "300",
                |         "reduction": 10,
                |         "isTrud": "TRUE",
                |         "description": "decription",
                |         "lowerTr": "100",
                |         "measurement": "measurement1",
                |         "methodology": "m1",                                                                                                                                                                                           
                |         "passportUrl": "files",
                |         "upperTr": "200",
                |         "weightingFactor": 100.123,
                |         "actualTrValue": null,
                |         "upperTrCalcNumber": "120"
                |     },
                |     "CardId": 3
                | }
-[ RECORD 2 ]-
date_trunc      | 2020-08-19 13:15:46
id              | 1073
usename         | emp1
log_module      | addKD
log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a
status          |  ERROR
jsonb_pretty    | {
                |     "SQLSTATE": "22P02"
                | }
-[ RECORD 3 ]-
date_trunc      | 2020-08-19 13:15:46
id              | 1074
usename         | emp1
log_module      | addKD
log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a
status          |  ERROR
jsonb_pretty    | {
                |     "SQLERRM": "invalid input syntax for type numeric: "null""
                | }
-[ RECORD 4 ]-
date_trunc      | 2020-08-19 13:15:46
id              | 1075
usename         | emp1
log_module      | addKD
log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a
status          |  ERROR-RETURNED_SQLSTATE
jsonb_pretty    | {
                |     "RETURNED_SQLSTATE": "22P02"
                | }
-[ RECORD 5 ]-
date_trunc      | 2020-08-19 13:15:46
id              | 1076
usename         | emp1
log_module      | addKD
log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a
status          |  ERROR-COLUMN_NAME
jsonb_pretty    | {
                |     "COLUMN_NAME": ""
                | }

-[ RECORD 6 ]-
date_trunc      | 2020-08-19 13:15:46
id              | 1077
usename         | emp1
log_module      | addKD
log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a
status          |  ERROR-CONSTRAINT_NAME
jsonb_pretty    | {
                |     "CONSTRAINT_NAME": ""
                | }
-[ RECORD 7 ]-
date_trunc      | 2020-08-19 13:15:46
id              | 1078
usename         | emp1
log_module      | addKD
log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a
status          |  ERROR-PG_DATATYPE_NAME
jsonb_pretty    | {
                |     "PG_DATATYPE_NAME": ""
                | }
-[ RECORD 8 ]-
date_trunc      | 2020-08-19 13:15:46
id              | 1079
usename         | emp1
log_module      | addKD
log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a
status          |  ERROR-MESSAGE_TEXT
jsonb_pretty    | {
                |     "MESSAGE_TEXT": "invalid input syntax for type numeric: "null""
                | }
-[ RECORD 9 ]-
date_trunc      | 2020-08-19 13:15:46
id              | 1080
usename         | emp1
log_module      | addKD
log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a
status          |  ERROR-SCHEMA_NAME
jsonb_pretty    | {
                |     "SCHEMA_NAME": ""
                | }
-[ RECORD 10 ]-
date_trunc      | 2020-08-19 13:15:46
id              | 1081
usename         | emp1
log_module      | addKD
log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a
status          |  ERROR-PG_EXCEPTION_DETAIL
jsonb_pretty    | {
                |     "PG_EXCEPTION_DETAIL": ""
                | }
-[ RECORD 11 ]-
date_trunc      | 2020-08-19 13:15:46
id              | 1082
usename         | emp1
log_module      | addKD
log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a
status          |  ERROR-PG_EXCEPTION_HINT
jsonb_pretty    | {
                |     "PG_EXCEPTION_HINT": ""
                | }
-[ RECORD 12 ]-
date_trunc      | 2020-08-19 13:15:46
id              | 1083
usename         | emp1
log_module      | addKD
log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a
status          |  ERROR-PG_EXCEPTION_CONTEXT
jsonb_pretty    | {
usename         | emp1
log_module      | addKD
log_module_hash | 0b4c1529a89af3ddf6af3821dc790e8a
status          |  ERROR-MESSAGE_TEXT
jsonb_pretty    | {
                |     "MESSAGE_TEXT": "invalid input syntax for type numeric: "null""
                | }

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹