PostgreSQL āĻ¸āĻžā§āĻšāĻŋāĻ¤ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ¸ā§āĻ¤āĻ°ā§‡ āĻŦā§āĻ¯āĻŦāĻ¸āĻžāĻ¯āĻŧāĻŋāĻ• āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻ‰āĻĒāĻ° āĻāĻ•āĻŸāĻŋ āĻ…āĻ§ā§āĻ¯āĻ¯āĻŧāĻ¨

āĻāĻ‡ āĻ¸ā§āĻ•ā§‡āĻš āĻ˛ā§‡āĻ–āĻžāĻ° āĻ…āĻ¨ā§āĻĒā§āĻ°ā§‡āĻ°āĻŖāĻž āĻ›āĻŋāĻ˛ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋ āĻ•ā§‹āĻ¯āĻŧāĻžāĻ°ā§‡āĻ¨ā§āĻŸāĻžāĻ‡āĻ¨ā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ•āĻžāĻœā§‡āĻ° āĻšāĻžāĻĒ ā§Ģ āĻ—ā§āĻŖ āĻŦā§‡āĻĄāĻŧā§‡ āĻ—āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ†āĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻ›āĻŋāĻ˛āĻžāĻŽāĨ¤ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ Lingualeo 5 āĻŽāĻŋāĻ˛āĻŋāĻ¯āĻŧāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻ¸āĻžāĻĨā§‡ PostgreSQL-āĻ āĻšāĻ˛ā§‡ āĻ—ā§‡āĻ›ā§‡. āĻ†āĻŽāĻŋ 4 āĻŦāĻ›āĻ° āĻ†āĻ—ā§‡ āĻĒā§āĻ°āĻ•āĻžāĻļāĻŋāĻ¤ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋāĻ“ āĻ†āĻ•āĻ°ā§āĻˇāĻŖā§€āĻ¯āĻŧ āĻŦāĻ˛ā§‡ āĻŽāĻ¨ā§‡ āĻ•āĻ°ā§‡āĻ›āĻŋ - MySQL-āĻ āĻŦā§āĻ¯āĻŦāĻ¸āĻžāĻ¯āĻŧāĻŋāĻ• āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž.

āĻŽāĻœāĻžāĻ° āĻŽāĻ¨ā§‡ āĻšāĻ˛ āĻāĻ•āĻ‡ āĻ­āĻžāĻŦāĻ¨āĻž - "āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡ āĻŦā§āĻ¯āĻŦāĻ¸āĻžāĻ¯āĻŧāĻŋāĻ• āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°ā§āĻ¨".

PostgreSQL āĻ¸āĻžā§āĻšāĻŋāĻ¤ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ¸ā§āĻ¤āĻ°ā§‡ āĻŦā§āĻ¯āĻŦāĻ¸āĻžāĻ¯āĻŧāĻŋāĻ• āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻ‰āĻĒāĻ° āĻāĻ•āĻŸāĻŋ āĻ…āĻ§ā§āĻ¯āĻ¯āĻŧāĻ¨

āĻāĻŸāĻž āĻļā§āĻ§ā§ āĻ†āĻŽāĻžāĻ° āĻŽāĻ¨ā§‡ āĻ†āĻ¸ā§‡āĻ¨āĻŋāĨ¤

āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“, āĻ­āĻŦāĻŋāĻˇā§āĻ¯āĻ¤ā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻŋ āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻ¨āĻŋāĻœā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ‰āĻĻā§āĻ­ā§‚āĻ¤ āĻ†āĻ•āĻ°ā§āĻˇāĻŖā§€āĻ¯āĻŧ āĻŦāĻŋāĻ•āĻžāĻļāĻ—ā§āĻ˛āĻŋ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻšā§‡āĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĻžāĻŽāĨ¤ āĻŦāĻŋāĻļā§‡āĻˇ āĻ•āĻ°ā§‡ āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°ā§‡ āĻ¯ā§‡ āĻ¤ā§āĻ˛āĻ¨āĻžāĻŽā§‚āĻ˛āĻ•āĻ­āĻžāĻŦā§‡ āĻ¸āĻŽā§āĻĒā§āĻ°āĻ¤āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¤ā§āĻ¯ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻŦāĻ‚ āĻŦā§āĻ¯āĻžāĻ•āĻāĻ¨ā§āĻĄ āĻ¸ā§āĻ¤āĻ°ā§‡ āĻŦā§āĻ¯āĻŦāĻ¸āĻžāĻ° āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ•ā§ŒāĻļāĻ˛āĻ—āĻ¤ āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤ āĻ¯āĻžāĻ¤ā§‡ āĻŦāĻŋāĻ•āĻļāĻŋāĻ¤ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§āĻ‡ āĻļā§€āĻ˜ā§āĻ°āĻ‡ āĻ•āĻžāĻ°āĻ“ āĻ•āĻžāĻœā§‡ āĻ†āĻ¸āĻŦā§‡ āĻ¨āĻž āĻāĻŦāĻ‚ āĻ•āĻžāĻ°āĻ“ āĻ¸ā§āĻŦāĻžāĻ°ā§āĻĨā§‡ āĻĨāĻžāĻ•āĻŦā§‡ āĻ¨āĻžāĨ¤

āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ—ā§āĻ˛ā§‹ āĻ•ā§‹āĻ¨ā§‹ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ†āĻŦāĻŋāĻˇā§āĻ•āĻžāĻ° āĻŦāĻž āĻŦā§āĻ¯āĻ¤āĻŋāĻ•ā§āĻ°āĻŽā§€ āĻ¨āĻ¯āĻŧāĨ¤ āĻœāĻžāĻ¨āĻŋ āĻ•āĻŋāĻ­āĻžāĻŦā§‡, āĻ¸āĻŦāĻ•āĻŋāĻ›ā§āĻ‡ āĻ•ā§āĻ˛āĻžāĻ¸āĻŋāĻ• āĻāĻŦāĻ‚ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŦāĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ (āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻ†āĻŽāĻŋ 20 āĻŦāĻ›āĻ° āĻ†āĻ—ā§‡ āĻ“āĻ°āĻžāĻ•ā§‡āĻ˛ā§‡ āĻāĻ•āĻ‡ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ›āĻŋ)āĨ¤ āĻ†āĻŽāĻŋ āĻ¸āĻŦ āĻ•āĻŋāĻ›ā§ āĻāĻ• āĻœāĻžāĻ¯āĻŧāĻ—āĻžāĻ¯āĻŧ āĻ¸āĻ‚āĻ—ā§āĻ°āĻš āĻ•āĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĨ¤ āĻ¯āĻĻāĻŋ āĻāĻŸāĻž āĻ•āĻžāĻ°ā§‹ āĻ•āĻžāĻœā§‡ āĻ˛āĻžāĻ—ā§‡āĨ¤ āĻ…āĻ¨ā§āĻļā§€āĻ˛āĻ¨ āĻĻā§‡āĻ–āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻ‡ āĻāĻ•āĻ‡ āĻ§āĻžāĻ°āĻŖāĻž āĻ¸ā§āĻŦāĻžāĻ§ā§€āĻ¨āĻ­āĻžāĻŦā§‡ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻŽāĻžāĻ¨ā§āĻˇā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻ†āĻ¸ā§‡āĨ¤ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻ¯ā§āĻ­ā§‡āĻ¨āĻŋāĻ° āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ¨āĻŋāĻœā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ°āĻžāĻ–āĻž āĻĻāĻ°āĻ•āĻžāĻ°ā§€āĨ¤

āĻ…āĻŦāĻļā§āĻ¯āĻ‡, āĻāĻ‡ āĻĒā§ƒāĻĨāĻŋāĻŦā§€āĻ¤ā§‡ āĻ•āĻŋāĻ›ā§āĻ‡ āĻ¨āĻŋāĻ–ā§āĻāĻ¤ āĻ¨āĻ¯āĻŧ, āĻ­ā§āĻ˛ āĻāĻŦāĻ‚ āĻŸāĻžāĻ‡āĻĒā§‹ āĻĻā§āĻ°ā§āĻ­āĻžāĻ—ā§āĻ¯āĻŦāĻļāĻ¤ āĻ¸āĻŽā§āĻ­āĻŦāĨ¤ āĻ¸āĻŽāĻžāĻ˛ā§‹āĻšāĻ¨āĻž āĻāĻŦāĻ‚ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻĻā§ƒāĻĸāĻŧāĻ­āĻžāĻŦā§‡ āĻ¸ā§āĻŦāĻžāĻ—āĻ¤ āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻļāĻŋāĻ¤āĨ¤ āĻāĻŦāĻ‚ āĻ†āĻ°āĻ“ āĻāĻ•āĻŸāĻŋ āĻ›ā§‹āĻŸ āĻŦāĻŋāĻŦāĻ°āĻŖ - āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻŦāĻŋāĻŦāĻ°āĻŖ āĻŦāĻžāĻĻ āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻ–āĻ¨āĻ“, āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻāĻ–āĻ¨āĻ“ āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦ āĻ•āĻžāĻœā§‡āĻ° āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡ āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ āĻšāĻ¯āĻŧāĨ¤ āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚, āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋ āĻ•ā§‡āĻŦāĻ˛ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻ•ā§‡āĻš āĻāĻŦāĻ‚ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ§āĻžāĻ°āĻŖāĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻŦāĻ°āĻŖ, āĻāĻ° āĻŦā§‡āĻļāĻŋ āĻ•āĻŋāĻ›ā§ āĻ¨āĻ¯āĻŧāĨ¤ āĻ†āĻŽāĻŋ āĻ†āĻļāĻž āĻ•āĻ°āĻŋ āĻ¸āĻžāĻŽāĻ—ā§āĻ°āĻŋāĻ• āĻ›āĻŦāĻŋ āĻŦā§‹āĻāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¯āĻĨā§‡āĻˇā§āĻŸ āĻŦāĻŋāĻŦāĻ°āĻŖ āĻ†āĻ›ā§‡āĨ¤

āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ§āĻžāĻ°āĻŖāĻž āĻšāĻ˛ "āĻŦāĻŋāĻ­āĻžāĻœāĻ¨ āĻāĻŦāĻ‚ āĻœāĻ¯āĻŧ, āĻ˛ā§āĻ•āĻžāĻ¨ āĻāĻŦāĻ‚ āĻ¨āĻŋāĻœā§‡āĻ°"

āĻ§āĻžāĻ°āĻŖāĻžāĻŸāĻŋ āĻ•ā§āĻ˛āĻžāĻ¸āĻŋāĻ• - āĻŸā§‡āĻŦāĻŋāĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĒā§ƒāĻĨāĻ• āĻ¸ā§āĻ•āĻŋāĻŽāĻž, āĻ¸āĻžā§āĻšāĻŋāĻ¤ āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĒā§ƒāĻĨāĻ• āĻ¸ā§āĻ•āĻŋāĻŽāĻžāĨ¤
āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻĄā§‡āĻŸāĻžāĻ¤ā§‡ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ¨ā§‡āĻ‡āĨ¤ āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ¯āĻž āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¤āĻž āĻšāĻ˛ āĻ¸āĻžā§āĻšāĻŋāĻ¤ āĻĢāĻžāĻ‚āĻļāĻ¨āĻ•ā§‡ āĻ•āĻ˛ āĻ•āĻ°āĻž āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ•āĻ°āĻžāĨ¤

āĻ­ā§‚āĻŽāĻŋāĻ•āĻž

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;

āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ…āĻ§āĻŋāĻ•āĻžāĻ°

āĻ­ā§‚āĻŽāĻŋāĻ•āĻž - DBA āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸ā§āĻ•āĻŋāĻŽāĻžāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ (āĻĄāĻŋāĻŦāĻŋ āĻŽāĻžāĻ˛āĻŋāĻ•ā§‡āĻ° āĻ­ā§‚āĻŽāĻŋāĻ•āĻž āĻĨā§‡āĻ•ā§‡ āĻĒā§ƒāĻĨāĻ•)ā§ˇ

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;

āĻ­ā§‚āĻŽāĻŋāĻ•āĻž - USER āĻ•ā§‡ āĻŦāĻŋāĻļā§‡āĻˇāĻžāĻ§āĻŋāĻ•āĻžāĻ° āĻ†āĻ›ā§‡ āĻāĻ•ā§āĻ¸āĻŋāĻ•āĻŋāĻ‰āĻŸ āĻšāĻŋāĻ¤ā§āĻ°ā§‡ āĻŦā§āĻ¯āĻŦāĻ¸āĻžāĻ¯āĻŧāĻŋāĻ•_āĻĢāĻžāĻ‚āĻļāĻ¨.

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;

āĻĢāĻ˛āĻžāĻĢāĻ˛

āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻšāĻŋāĻ¤ā§āĻ°āĻŸāĻŋ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻŋ āĻŽāĻ¨ā§‡ āĻ•āĻ°āĻŋ āĻāĻŸāĻŋ āĻ¯āĻĨā§‡āĻˇā§āĻŸāĨ¤ āĻ¯āĻĻāĻŋ āĻ•ā§‡āĻ‰ āĻŦāĻŋāĻļāĻĻ āĻāĻŦāĻ‚ āĻĢāĻ˛āĻžāĻĢāĻ˛ā§‡ āĻ†āĻ—ā§āĻ°āĻšā§€ āĻšāĻ¨, āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻ˛āĻŋāĻ–ā§āĻ¨, āĻ†āĻŽāĻŋ āĻ›āĻŦāĻŋāĻ¤ā§‡ āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻ¸ā§āĻĒāĻ°ā§āĻļ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻĒā§‡āĻ°ā§‡ āĻ–ā§āĻļāĻŋ āĻšāĻŦāĨ¤

āĻĻā§āĻ°āĻˇā§āĻŸāĻŦā§āĻ¯

āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻ˛āĻ—āĻŋāĻ‚ - āĻ‡āĻ¨āĻĒā§āĻŸ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ āĻĒā§āĻ°āĻ•āĻžāĻ°

-[ 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

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨