เจเจธ เจธเจเฉเจ เจจเฉเฉฐ เจฒเจฟเจเจฃ เจฒเจ เจชเฉเจฐเฉเจฐเจฃเจพ เจฒเฉเจ เจธเฉ
เจฆเจฟเจฒเจเจธเจช เจเจพเจชเจฆเจพ เจธเฉ เจเจฟ เจเจนเฉ เจตเจฟเจเจพเจฐ - "เจกเฉเจเจพเจฌเฉเจธ เจตเจฟเฉฑเจ เจตเจชเจพเจฐเจ เจคเจฐเจ เจฒเจพเจเฉ เจเจฐเฉ".
เจเจน เจธเจฟเจฐเจซ เจฎเฉเจ เจจเจนเฉเจ เจธเฉ เจเฉ เจฎเจจ เจตเจฟเฉฑเจ เจเจเจ เจธเฉ.
เจจเจพเจฒ เจนเฉ, เจญเจตเจฟเฉฑเจ เจฒเจ, เจฎเฉเจ เจธเจญ เจคเฉเจ เจชเจนเจฟเจฒเจพเจ, เจเจชเจฃเฉ เจฒเจ, เจฒเจพเจเฉ เจเจฐเจจ เจฆเฉเจฐเจพเจจ เจชเฉเจฆเจพ เจนเฉเจ เจฆเจฟเจฒเจเจธเจช เจตเจฟเจเจพเจธ เจจเฉเฉฐ เจธเฉเจฐเฉฑเจเจฟเจ เจค เจฐเฉฑเจเจฃเจพ เจเจพเจนเฉเฉฐเจฆเจพ เจธเฉ. เจเจพเจธ เจคเฉเจฐ 'เจคเฉ เจเจธ เจเฉฑเจฒ 'เจคเฉ เจตเจฟเจเจพเจฐ เจเจฐเจฆเฉ เจนเฉเจ เจเจฟ เจฎเฉเจเจพเจฌเจฒเจคเจจ เจนเจพเจฒ เจนเฉ เจตเจฟเฉฑเจ เจเจฐเจเฉเจเฉเจเจเจฐ เจจเฉเฉฐ เจฌเจฆเจฒเจฃ เจ เจคเฉ เจตเจชเจพเจฐเจ เจคเจฐเจ เจจเฉเฉฐ เจฌเฉเจเจเจเจก เจชเฉฑเจงเจฐ 'เจคเฉ เจคเจฌเจฆเฉเจฒ เจเจฐเจจ เจฒเจ เจเฉฑเจ เจฐเจฃเจจเฉเจคเจ เจซเฉเจธเจฒเจพ เจฒเจฟเจ เจเจฟเจ เจธเฉเฅค เจคเจพเจ เจเฉ เจเฉ เจตเฉ เจตเจฟเจเจธเจค เจเฉเจคเจพ เจเจฟเจ เจนเฉ, เจเจน เจเจฒเจฆเฉ เจนเฉ เจเจฟเจธเฉ เจฆเฉ เจเฉฐเจฎ เจเจตเฉเจเจพ เจ เจคเฉ เจเจฟเจธเฉ เจฆเฉ เจนเจฟเฉฑเจค เจตเจฟเฉฑเจ เจจเจนเฉเจ เจฐเจนเฉเจเจพเฅค
เจตเจฐเจฃเจฟเจค เจคเจฐเฉเจเฉ เจเจฟเจธเฉ เจเจฟเจธเจฎ เจฆเฉ เจเฉเจ เจเจพเจ เจฌเฉเจฎเจฟเจธเจพเจฒ เจจเจนเฉเจ เจนเจจเฅค เจเฉ เจคเฉเจนเจพเจจเฉเฉฐ, เจนเจฐ เจเฉเจเจผ เจเจฒเจพเจธเจฟเจ เจนเฉ เจ เจคเฉ เจเจ เจตเจพเจฐ เจฒเจพเจเฉ เจเฉเจคเฉ เจเจ เจนเฉ (เจเจฆเจพเจนเจฐเจฃ เจตเจเฉเจ, เจฎเฉเจ เจเจฐเฉเจเจฒ 'เจคเฉ 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 เจธเจพเจฐเฉเจเจ เจธเจเฉเจฎเจพเจ เจคเฉฑเจ เจชเฉเจฐเฉ เจชเจนเฉเฉฐเจ เจนเฉ (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;
เจญเฉเจฎเจฟเจเจพ - เจเจชเจญเฉเจเจคเจพ เจฆเจพ เจตเจฟเจธเจผเฉเจธเจผ เจ เจงเจฟเจเจพเจฐ เจนเฉ เจฌเจพเจนเจฐ เจเฉฑ .เฉ เจเจฟเฉฑเจคเจฐ เจตเจฟเฉฑเจ เจตเจชเจพเจฐ_เจเจพเจฐเจ.
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