เจฆเฉ เจชเฉเจฐเจ เจตเจเฉเจ
เจธเจฟเจงเจพเจเจคเจ เจญเจพเจ เจจเฉเฉฐ เจฆเจธเจคเจพเจตเฉเจเจผ เจตเจฟเฉฑเจ เจเฉฐเจเฉ เจคเจฐเฉเจนเจพเจ เจฆเจฐเจธเจพเจเจ เจเจฟเจ เจนเฉ
เจฒเฉเจ เจตเจฟเฉฑเจ เจเฉเจ เจจเจตเฉเจ เจเฉฑเจฒ เจจเจนเฉเจ เจนเฉ, เจเฉเจ เจเฉเจชเจค เจ เจฐเจฅ เจ เจคเฉ เจเฉเจชเจค เจเจฟเจเจจ เจจเจนเฉเจ เจนเฉเฅค เจเฉฑเจ เจธเจฟเจงเจพเจเจคเจ เจตเจฟเจเจพเจฐ เจฆเฉ เจตเจฟเจนเจพเจฐเจ เจฒเจพเจเฉ เจเจฐเจจ เจฌเจพเจฐเฉ เจธเจฟเจฐเจซ เจเฉฑเจ เจธเจเฉเจ. เจเฉ เจเฉเจ เจฆเจฟเจฒเจเจธเจชเฉ เจฐเฉฑเจเจฆเจพ เจนเฉ, เจคเจพเจ เจชเฉเฉเจนเฉ. เจเฉเจเจฐ เจคเฉเจนเจพเจจเฉเฉฐ เจเฉเจ เจฆเจฟเจฒเจเจธเจชเฉ เจจเจนเฉเจ เจนเฉ, เจคเจพเจ เจเจชเจฃเจพ เจธเจฎเจพเจ เจฌเจฐเจฌเจพเจฆ เจจเจพ เจเจฐเฉเฅค
เจธเจฎเฉฑเจธเจฟเจ เจฆเจพ เจเจ เจจ
เจตเจฟเจธเจผเฉ เจฆเฉ เจเฉเจคเจฐ เจตเจฟเฉฑเจ เจกเฉเฉฐเจเจพเจ เจจเจพเจฒ เจเฉเจคเจพเจเฉเจฐเฉ เจเฉเจคเฉ เจฌเจฟเจจเจพเจ, เจธเฉฐเจเฉเจช เจตเจฟเฉฑเจ, เจธเจฎเฉฑเจธเจฟเจ เจจเฉเฉฐ เจเจธ เจคเจฐเฉเจนเจพเจ เจคเจฟเจเจฐ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉ: เจเฉฑเจฅเฉ เจเฉฑเจ เจธเจพเจฐเจฃเฉ เจนเฉ เจเฉ เจเฉฑเจ เจเจพเจธ เจเจพเจฐเฉเจฌเจพเจฐเฉ เจนเจธเจคเฉ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจฆเฉ เจนเฉเฅค เจธเจพเจฐเจฃเฉ เจตเจฟเฉฑเจ เจเจคเจพเจฐเจพเจ เจจเฉเฉฐ เจฎเจฟเจเจพเจเจ เจเจพ เจธเจเจฆเจพ เจนเฉ, เจชเจฐ เจเจคเจพเจฐเจพเจ เจจเฉเฉฐ เจญเฉเจคเจฟเจ เจคเฉเจฐ 'เจคเฉ เจจเจนเฉเจ เจฎเจฟเจเจพเจเจ เจเจพ เจธเจเจฆเจพ เจนเฉ; เจเจนเจจเจพเจ เจจเฉเฉฐ เจฒเฉเจเจพเจเจ เจเจพเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉเฅค
เจเจฟเจเจเจเจฟ เจเจน เจเจฟเจนเจพ เจเจพเจเจฆเจพ เจนเฉ: "เจเฉเจ เจตเฉ เจจเจพ เจฎเจฟเจเจพเจ, เจฌเจธ เจเจธเจฆเจพ เจจเจพเจฎ เจฌเจฆเจฒเฉ. เจเฉฐเจเจฐเจจเฉเจ เจนเจฐ เจเฉเจเจผ เจจเฉเฉฐ เจธเจเฉเจฐ เจเจฐเจฆเจพ เจนเฉ"
เจฐเจธเจคเฉ เจฆเฉ เจจเจพเจฒ, เจเจน เจธเจฒเจพเจน เจฆเจฟเฉฑเจคเฉ เจเจพเจเจฆเฉ เจนเฉ เจเจฟ เจฎเฉเจเฉเจฆเจพ เจธเจเฉเจฐ เจเฉเจคเฉ เจซเฉฐเจเจธเจผเจจเจพเจ เจจเฉเฉฐ เจฆเฉเจฌเจพเจฐเจพ เจจเจพ เจฒเจฟเจเจฃเจพ เจเฉ เจเจธ เจเจเจพเจ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจฆเฉ เจนเจจเฅค
เจเจธ เจงเจพเจฐเจจเจพ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจจ เจฒเจ, เจธเจพเจฐเจฃเฉ เจตเจฟเฉฑเจ เจตเจฟเจธเจผเฉเจธเจผเจคเจพ เจนเฉ เจนเฉ_เจฎเจฟเจเจพเจเจ เจเจฟเจ เจนเฉ. เจซเจฟเจฐ เจธเจญ เจเฉเจ เจธเจงเจพเจฐเจจ เจนเฉ - เจคเฉเจนเจพเจจเฉเฉฐ เจเจน เจฏเจเฉเจจเฉ เจฌเจฃเจพเจเจฃ เจฆเฉ เจเจผเจฐเฉเจฐเจค เจนเฉ เจเจฟ เจเจฒเจพเจเฉฐเจ เจธเจฟเจฐเจซ เจเจน เจฒเจพเจเจจเจพเจ เจฆเฉเจ เจธเจเจฆเจพ เจนเฉ เจเจฟเจธ เจตเจฟเฉฑเจ เจเฉเจฃ เจนเฉ เจนเฉ_เจฎเจฟเจเจพเจเจ เจเจฟเจ เจนเฉ เจเฉเจ เจพ เจตเจฟเจงเฉ เจเจฟเจธ เจฒเจ เจตเจฐเจคเฉ เจเจพเจเจฆเฉ เจนเฉ? เจเจคเจพเจฐ เจชเฉฑเจงเจฐ เจธเฉเจฐเฉฑเจเจฟเจ.
ะ ะตะฐะปะธะทะฐัะธั
เจเฉฑเจ เจตเฉฑเจเจฐเฉ เจญเฉเจฎเจฟเจเจพ เจ เจคเฉ เจธเจเฉเจฎเจพ เจฌเจฃเจพเจ
CREATE ROLE repos;
CREATE SCHEMA repos;
เจเฉเจเจพ เจธเจพเจฐเจฃเฉ เจฌเจฃเจพเจ
CREATE TABLE repos.file
(
...
is_del BOOLEAN DEFAULT FALSE
);
CREATE SCHEMA repos
เจเจพเจฒเฉ เจเจฐเฉ เจเจคเจพเจฐ เจชเฉฑเจงเจฐ เจธเฉเจฐเฉฑเจเจฟเจ
ALTER TABLE repos.file ENABLE ROW LEVEL SECURITY ;
CREATE POLICY file_invisible_deleted ON repos.file FOR ALL TO dba_role USING ( NOT is_deleted );
GRANT ALL ON TABLE repos.file to dba_role ;
GRANT USAGE ON SCHEMA repos TO dba_role ;
เจธเฉเจตเจพ เจซเฉฐเจเจธเจผเจจ โ เจธเจพเจฐเจฃเฉ เจตเจฟเฉฑเจ เจเฉฑเจ เจเจคเจพเจฐ เจจเฉเฉฐ เจฎเจฟเจเจพเจเจฃเจพ
CREATE OR REPLACE repos.delete( curr_id repos.file.id%TYPE)
RETURNS integer AS $$
BEGIN
...
UPDATE repos.file
SET is_del = TRUE
WHERE id = curr_id ;
...
END
$$ LANGUAGE plpgsql SECURITY DEFINER;
เจตเจชเจพเจฐเจ เจซเฉฐเจเจธเจผเจจ - เจเฉฑเจ เจฆเจธเจคเจพเจตเฉเจเจผ เจจเฉเฉฐ เจฎเจฟเจเจพเจเจฃเจพ
CREATE OR REPLACE business_functions.deleteDoc( doc_for_delete JSON )
RETURNS JSON AS $$
BEGIN
...
PERFORM repos.delete( doc_id ) ;
...
END
$$ LANGUAGE plpgsql SECURITY DEFINER;
ะ ะตะทัะปััะฐัั
เจเจฒเจพเจเฉฐเจ เจฆเจธเจคเจพเจตเฉเจเจผ เจจเฉเฉฐ เจฎเจฟเจเจพ เจฆเจฟเฉฐเจฆเจพ เจนเฉ
SELECT business_functions.delCFile( (SELECT json_build_object( 'CId', 3 )) );
เจฎเจฟเจเจพเจเจฃ เจคเฉเจ เจฌเจพเจ เจฆ, เจเจฒเจพเจเฉฐเจ เจฆเจธเจคเจพเจตเฉเจเจผ เจจเฉเฉฐ เจจเจนเฉเจ เจฆเฉเจเจฆเจพ
SELECT business_functions.getCFile"( (SELECT json_build_object( 'CId', 3 )) ) ;
-----------------
(0 rows)
เจชเจฐ เจกเฉเจเจพเจฌเฉเจธ เจตเจฟเฉฑเจ เจฆเจธเจคเจพเจตเฉเจเจผ เจจเฉเฉฐ เจจเจนเฉเจ เจฎเจฟเจเจพเจเจ เจเจพเจเจฆเจพ เจนเฉ, เจธเจฟเจฐเจซ เจเฉเจฃ เจฌเจฆเจฒเจฟเจ เจเจพเจเจฆเจพ เจนเฉ is_del
psql -d my_db
SELECT id, name , is_del FROM repos.file ;
id | name | is_del
--+---------+------------
1 | test_1 | t
(1 row)
เจเจฟเจธ เจฆเฉ เจธเจฎเฉฑเจธเจฟเจ เจฌเจฟเจเจจ เจตเจฟเฉฑเจ เจฒเฉเฉ เจธเฉเฅค
เจจเจคเฉเจเจพ
เจเฉเจเจฐ เจตเจฟเจธเจผเจพ เจฆเจฟเจฒเจเจธเจช เจนเฉ, เจคเจพเจ เจ
เจเจฒเฉ เจ
เจงเจฟเจเจจ เจตเจฟเฉฑเจ เจคเฉเจธเฉเจ เจฐเฉ เจฒเฉเจตเจฒ เจธเฉเจฐเฉฑเจเจฟเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเจ เจกเฉเจเจพ เจเจเจธเฉเจธ เจจเฉเฉฐ เจตเฉฑเจ เจเจฐเจจ เจฒเจ เจเฉฑเจ เจฐเฉเจฒ-เจ
เจงเจพเจฐเจฟเจค เจฎเจพเจกเจฒ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจจ เจฆเฉ เจเฉฑเจ เจเจฆเจพเจนเจฐเจฃ เจฆเจฟเจเจพ เจธเจเจฆเฉ เจนเฉเฅค
เจธเจฐเฉเจค: www.habr.com