PostgreSQL DBMS-เตฝ เดเตเดฌเดฟเตพ เดกเดฟเดชเตปเดกเตปเดธเดฟเดเตพเดเตเดเตเดชเตเดชเด เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เดชเตเดคเตเดคเดฃเดฟเตฝ เดเดดเตเดคเดฟเดฏ เดเดฐเต เดฏเตเดเตเดเดฟเดฒเดฟเดฑเตเดฑเดฟเดฏเดพเดฃเต เดเดจเตเดจเต เดเดพเตป Habr เดตเดพเดฏเดจเดเตเดเดพเตผเดเตเดเต เด
เดตเดคเดฐเดฟเดชเตเดชเดฟเดเตเดเดพเตป เดเดเตเดฐเดนเดฟเดเตเดเตเดจเตเดจเดคเต.
เดฏเตเดเตเดเดฟเดฒเดฟเดฑเตเดฑเดฟเดฏเตเดเต API เดฒเดณเดฟเดคเดตเตเด เดฎเตเดจเตเดจเต เดฐเตเดคเดฟเดเตพ เดเตพเดเตเดเตเดณเตเดณเตเดจเตเดจเดคเตเดฎเดพเดฃเต:
- เดเตผเดเตเดเตเดตเต_เดเตเดฌเดฟเตพ - เดจเดฟเตผเดฆเตเดฆเดฟเดทเตโเด เดชเตเดฐเตเดฎเดฑเดฟ เดเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเต เดตเดฐเดฟเดเตพ เดเดตเตผเดคเตเดคเดจ เดเตผเดเตเดเตเดตเดฟเดเดเต/เดเดฒเตเดฒเดพเดคเดพเดเตเดเตฝ
- get_table_references - เดเดฐเต เดชเดเตเดเดฟเดเดฏเตโเดเตเดเดพเดฏเตเดณเตเดณ เดกเดฟเดชเตปเดกเตปเดธเดฟเดเตพเดเตเดเดพเดฏเดฟ เดคเดฟเดฐเดฏเตเด (เดจเดฟเตผเดฆเตเดฆเดฟเดทเตโเดเดตเตเด เด เดคเต เดชเดฐเดพเดฎเตผเดถเดฟเดเตเดเตเดจเตเดจเดตเดฏเตเด เดชเดฐเดพเดฎเตผเดถเดฟเดเตเด เดชเดเตเดเดฟเดเดเตพ เดเดพเดฃเดฟเดเตเดเตเด)
- เดฑเดซเดฑเตปเดธเตเดเตพ_เดตเดฐเต - เดเดตเดถเตเดฏเดฎเตเดณเตเดณ เดชเดเตเดเดฟเดเดฏเดฟเดฒเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเด เดตเดฐเดฟเดเตพ เดชเดฐเดพเดฎเตผเดถเดฟเดเตเดเตเดจเตเดจ เดฎเดฑเตเดฑเต เดชเดเตเดเดฟเดเดเดณเดฟเดฒเต เดตเดฐเดฟเดเตพเดเตเดเดพเดฏเดฟ เดคเดฟเดฐเดฏเตเด
เดเดฐเดฟเดคเตเดฐเดพเดคเตเดคเดเดพเดฒเด
เดเดจเตเดฑเต เดชเตเดฐเต เดเดฒเตเดเต เดฌเตเตผเดธเตเดตเต, เดเดพเตป เดกเตเดเดเตเดฒเดฟเดเตเดเดฟเดฒเต เดฎเตเตผเดเตเดเตเดเตเดเต เดฒเตเตปเดกเดฟเดเดเต เดฎเดพเดจเตเดเตผเดฎเดพเตผเดเตเดเดพเดฏเตเดณเตเดณ CRM เดเตเดฎเดฟเดฒเต เดเดฐเต เดกเตเดตเดฒเดชเตเดชเดฑเดพเดฃเต.
เดเดเตเดเดณเตเดเต CRM เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต เดชเตเดฐเดงเดพเดจ เดกเดพเดฑเตเดฑเดพเดฌเตเดธเต เดเดฎเตเดชเดจเดฟเดฏเดฟเดฒเต เดตเตเดณเดฟเดฏเดคเตเดคเดฟเดจเตเดฑเต เดเดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เดเดฑเตเดฑเดตเตเด เดตเดฒเดฟเดฏ เดเดจเตเดจเดพเดฃเต. เดเดคเต เดเดฑเตเดฑเดตเตเด เดชเดดเดเตเดเด เดเตเดจเตเดจ เดเดจเตเดจเดพเดฃเต: เดชเตเดฐเตเดเดเตเดฑเตเดฑเดฟเดจเตเดฑเต เดธเดฎเดพเดฐเดเดญเดคเตเดคเดฟเตฝ เดคเดจเตเดจเต เดเดคเต เดชเตเดฐเดคเตเดฏเดเตเดทเดชเตเดชเตเดเตเดเต, เดฎเดฐเดเตเดเตพ เดตเดฒเตเดคเดพเดฏเดฟเดฐเตเดจเตเดจเดชเตเดชเตเตพ, เดกเตเดเดเตเดฒเดฟเดเตเดเต เดเดฐเต เดธเตเดฑเตเดฑเดพเตผเดเตเดเดชเตเดชเดพเดฏเดฟเดฐเตเดจเตเดจเต, เดเตเดเดพเดคเต เดเดฐเต เดซเดพเดทเดจเดฌเดฟเตพ เดชเตเดคเตเดคเตบ เด เดธเดฟเตปเดเตเดฐเดฃเดธเต เดเดเตเดเดเตเดเตเดเดฟเตฝ เดเดฐเต เดฎเตเดเตเดฐเตเดธเตผเดตเตเดธเดฟเดจเต เดชเดเดฐเด เดชเดฟเดเดเตเดเตเดชเดฟเดฏเดฟเตฝ เดเดฐเต เดตเดฒเดฟเดฏ เดฎเตเดฃเตเดฒเดฟเดคเตเดคเต เดเดฃเตเดเดพเดฏเดฟเดฐเตเดจเตเดจเต.
PHP-เดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดชเตเดคเตเดคเดฃเดฟเดฒเตเดเตเดเตเดณเตเดณ เดฎเดพเดฑเตเดฑเด เดตเดณเดฐเต เดฆเตเตผเดเตเดฏเดฎเตเดฑเดฟเดฏเดคเดพเดฏเดฟเดฐเตเดจเตเดจเต, เดเตเดเดพเดคเต เดฐเดฃเตเดเต เดธเดฟเดธเตเดฑเตเดฑเดเตเดเดณเตเดเตเดฏเตเด เดเดฐเตเดธเดฎเดฏเด เดชเดฟเดจเตเดคเตเดฃ เดเดตเดถเตเดฏเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเต, เดเดคเต เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเดจเตเดฑเต เดฐเตเดชเดเตฝเดชเตเดชเดจเดฏเต เดฌเดพเดงเดฟเดเตเดเต.
เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เดตเตเดฏเดคเตเดฏเดธเตโเดค เดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เด เดจเตเดตเตเดทเดฃเดเตเดเตพเดเตเดเดพเดฏเตเดณเตเดณ เดเดฐเต เดเตเดเตเดเด เดธเตเดเดฟเดเดเดณเตเดณเตเดณ, เดตเดณเดฐเต เดเดฃเดเตเดฑเตเดฑเตเดเตเดฏเตโเดคเดคเตเด เดตเดฒเดฟเดฏ เดชเดเตเดเดฟเดเดเดณเตเดณเตเดณเดคเตเดฎเดพเดฏ เดเดฐเต เดกเดพเดฑเตเดฑเดพเดฌเตเดธเต เดเดเตเดเดณเตเดเต เดชเดเตเดเดฒเตเดฃเตเดเต. เดเดคเตเดฒเตเดฒเดพเด เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเดจเตเดฑเต เดชเตเดฐเดเดเดจเดคเตเดคเต เดชเตเดฐเดคเดฟเดเตเดฒเดฎเดพเดฏเดฟ เดฌเดพเดงเดฟเดเตเดเตเดจเตเดจเต: เดตเดฒเดฟเดฏ เดชเดเตเดเดฟเดเดเดณเตเด เด เดตเดฏเตเดเตเดเดฟเดเดฏเดฟเดฒเตเดณเตเดณ เดเดฐเต เดเตเดเตเดเด เดฌเดจเตเดงเดเตเดเดณเตเด เดเดพเดฐเดฃเด, เด เดจเตเดตเตเดทเดฃเดเตเดเดณเตเดเต เดธเดเตเดเตเตผเดฃเตเดฃเดค เดจเดฟเดฐเดจเตเดคเดฐเด เดตเตผเดฆเตเดงเดฟเดเตเดเตเดเตเดฃเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต, เดเดคเต เดเดฑเตเดฑเดตเตเด เดเตเดเตเดคเตฝ เดฒเตเดกเต เดเตเดฏเตเดค เดชเดเตเดเดฟเดเดเตพเดเตเดเต เดจเดฟเตผเดฃเตเดฃเดพเดฏเดเดฎเดพเดฃเต.
เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเดฒเต เดฒเตเดกเต เดเตเดฑเดฏเตเดเตเดเตเดจเตเดจเดคเดฟเดจเต, เดเดฑเตเดฑเดตเตเด เดตเดฒเดฟเดฏเดคเตเด เดฒเตเดกเตเดเตเดฏเตเดคเดคเตเดฎเดพเดฏ เดชเดเตเดเดฟเดเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดเตผเดเตเดเตเดตเตเดเตเดฏเตโเดคเดตเดฏเดฟเดฒเตเดเตเดเต เดชเดดเดฏ เดฑเตเดเตเดเตเตผเดกเตเดเตพ เดเตเดฎเดพเดฑเตเดจเตเดจ เดเดฐเต เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเต เดเดดเตเดคเดพเตป เดเดเตเดเตพ เดคเตเดฐเตเดฎเดพเดจเดฟเดเตเดเต (เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดเดคเดฟเตฝ เดจเดฟเดจเตเดจเต task
ะฒ task_archive
).
เดชเดเตเดเดฟเดเดเตพ เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เดตเดฒเดฟเดฏ เดฌเดจเตเดงเดเตเดเดณเดพเตฝ เด เดเดพเดธเตเดเต เดธเดเตเดเตเตผเดฃเตเดฃเดฎเดพเดฃเต: เด
เดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเดฐเดฟเดเตพ เดจเตเดเตเดเตเด task
ะฒ task_archive
เดฎเดคเดฟเดฏเดพเดเดฟเดฒเตเดฒ, เด
เดคเดฟเดจเตเดฎเตเดฎเตเดชเต เดจเดฟเดเตเดเตพ เดเดฒเตเดฒเดพ เดฑเดซเดฑเตปเดธเตเดเดณเตเดฎเดพเดฏเตเด เดเดคเต เดเดตเตผเดคเตเดคเดฟเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต task
เดชเดเตเดเดฟเดเดเตพ.
เดเดพเตป เดเดฐเต เดเดฆเดพเดนเดฐเดฃเด เดเตเดฃเตเดเต เดคเตเดณเดฟเดฏเดฟเดเตเดเตเด
เดจเดฎเตเดเตเดเต เดเดฐเต เดชเดเตเดเดฟเดเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดฑเตเดเตเดเตเตผเดกเตเดเตพ เดเดฒเตเดฒเดพเดคเดพเดเตเดเดฃเดฎเตเดจเตเดจเต เดชเดฑเดฏเดพเด Flights
. เดชเตเดธเตเดฑเตเดฑเตโเดเตเดฐเตเดธเต เดเดเตเดเดณเต เดเดคเต เดชเตเดฒเต เดเตเดฏเตเดฏเดพเตป เด
เดจเตเดตเดฆเดฟเดเตเดเดฟเดฒเตเดฒ: เดเดเตเดเตพ เดเดฆเตเดฏเด เดเดฒเตเดฒเดพ เดฑเดซเดฑเตปเดธเดฟเดเดเต เดเตเดฌเดฟเดณเตเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเตเด เดฑเตเดเตเดเตเตผเดกเตเดเตพ เดเดฒเตเดฒเดพเดคเดพเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต, เด
เดเตเดเดจเต เดเดฐเตเด เดฑเดซเดฑเตปเดธเต เดเตเดฏเตเดฏเดพเดคเตเดค เดชเดเตเดเดฟเดเดเดณเดฟเดฒเตเดเตเดเต เดเดตเตผเดคเตเดคเดฟเดเตเดเต เดเดฑเดเตเดเตเด.
เดเดเตเดเดณเตเดเต เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเตฝ Flights
เดชเดฐเดพเดฎเตผเดถเดฟเดเตเดเตเดจเตเดจเต Ticket_flights
, เด
เดตเดณเตเดเต เดฎเตเตฝ - Boarding_passes
.
เด เดคเดฟเดจเดพเตฝ, เด เดเตเดฐเดฎเดคเตเดคเดฟเตฝ เดจเดฟเดเตเดเตพ เดเดคเต เดเดฒเตเดฒเดพเดคเดพเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต:
- เดตเดฐเดฟเดเดณเตเดเต เดชเตเดฐเดพเดฅเดฎเดฟเด เดเตเดเตพ (เดชเดฟเดเต) เดฎเตเดฒเตเดฏเดเตเดเตพ เดจเดฎเตเดเตเดเต เดฒเดญเดฟเดเตเดเตเด
Ticket_flights
, เด เดคเดฟเตฝ เดเดฒเตเดฒเดพเดคเดพเดเตเดเตเดฃเตเด เดตเดฐเดฟเดเดณเต เดชเดฐเดพเดฎเตผเดถเดฟเดเตเดเตเดจเตเดจเตFlights
. - เดจเดฎเตเดเตเดเต เดชเดฟเดเต เดตเดฐเดฟเดเตพ เดฒเดญเดฟเดเตเดเตเด
Boarding_passes
, เดเดคเต เดชเดฐเดพเดฎเตผเดถเดฟเดเตเดเตเดจเตเดจเตTicket_flights
. - เดชเดเตเดเดฟเดเดฏเดฟเดฒเต เดเดเตเดเด 2 เตฝ เดจเดฟเดจเตเดจเต เดเดเตเดเตพ เดชเดฟเดเต เดตเดดเดฟ เดตเดฐเดฟเดเตพ เดเดฒเตเดฒเดพเดคเดพเดเตเดเตเดจเตเดจเต
Boarding_passes
. - เดเดเตเดเด 1-เตฝ เดจเดฟเดจเตเดจเต PK-เดฏเตเดเต เดตเดฐเดฟเดเตพ เดเดฒเตเดฒเดพเดคเดพเดเตเดเตเด
Ticket_flights
. - เดเดจเตเดจเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเดฐเดฟเดเตพ เดจเตเดเตเดเดเดเตเดฏเตเดฏเตเดจเตเดจเต
Flights
.
เดซเดฒเด PgGraph เดเดจเตเดจ เดฏเตเดเตเดเดฟเดฒเดฟเดฑเตเดฑเดฟ เดเดฏเดฟเดฐเตเดจเตเดจเต, เด เดคเต เดเดเตเดเตพ เดเดชเตเดชเตบ เดธเตเดดเตเดธเต เดเดเตเดเดพเตป เดคเตเดฐเตเดฎเดพเดจเดฟเดเตเดเต.
เดเดเตเดเดจเต เดเดชเดฏเตเดเดฟเดเตเดเดพเด
เดฏเตเดเตเดเดฟเดฒเดฟเดฑเตเดฑเดฟ เดฐเดฃเตเดเต เดเดชเดฏเตเด เดฐเตเดคเดฟเดเดณเต เดชเดฟเดจเตเดคเตเดฃเดฏเตเดเตเดเตเดจเตเดจเต:
- เดเดฎเดพเตปเดกเต เดฒเตเดจเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเดฟเดณเดฟเดเตเดเตเด (
pggraph โฆ
). - เดชเตเดคเตเดคเตบ เดเตเดกเดฟเดฒเต เดเดชเดฏเตเดเด (เดเตเดฒเดพเดธเต
PgGraphApi
).
เดเตปเดธเตเดฑเตเดฑเดพเดณเตเดทเดจเตเด เดเตเตบเดซเดฟเดเดฑเตเดทเดจเตเด
เดเดฆเตเดฏเด เดจเดฟเดเตเดเตพ Pypi เดฑเดฟเดชเตเดชเตเดธเดฟเดฑเตเดฑเดฑเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดฏเตเดเตเดเดฟเดฒเดฟเดฑเตเดฑเดฟ เดเตปเดธเตเดฑเตเดฑเดพเตพ เดเตเดฏเตเดฏเตเดฃเตเดเดคเตเดฃเตเดเต:
pip3 install pggraph
เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเดจเตเดฑเต เดเตเตบเดซเดฟเดเดฑเตเดทเดจเตเด เดเตผเดเตเดเตเดตเดฟเดเดเต เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเตเด เดเดชเดฏเตเดเดฟเดเตเดเต เดฒเตเดเตเดเตฝ เดฎเตเดทเตเดจเดฟเตฝ เดเดฐเต config.ini เดซเดฏเตฝ เดธเตเดทเตเดเดฟเดเตเดเตเด:
[db]
host = localhost
port = 5432
user = postgres
password = postgres
dbname = postgres
schema = public ; ะะตะพะฑัะทะฐัะตะปัะฝัะน ะฟะฐัะฐะผะตัั, ัะบะฐะทะฐะฝะพ ะทะฝะฐัะตะฝะธะต ะฟะพ ัะผะพะปัะฐะฝะธั
[archive] ; ะะฐะฝะฝัะน ัะฐะทะดะตะป ะทะฐะฟะพะปะฝััั ะฝะตะพะฑัะทะฐัะตะปัะฝะพ, ะฝะธะถะต ัะบะฐะทะฐะฝั ะทะฝะฐัะตะฝะธั ะฟะพ ัะผะพะปัะฐะฝะธั
is_debug = false
chunk_size = 1000
max_depth = 20
to_archive = true
archive_suffix = 'archive'
เดเตบเดธเตเดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเตเด
เดชเดพเดฐเดพเดฎเตเดฑเตเดฑเดฑเตเดเตพ
$ pggraph -h
usage: pggraph action [-h] --table TABLE [--ids IDS] [--config_path CONFIG_PATH]
positional arguments:
action required action: archive_table, get_table_references, get_rows_references
optional arguments:
-h, --help show this help message and exit
--table TABLE table name
--ids IDS primary key ids, separated by comma, e.g. 1,2,3
--config_path CONFIG_PATH path to config.ini
--log_path LOG_PATH path to log dir
--log_level LOG_LEVEL log level (debug, info, error)
เดธเตเดฅเดพเดจ เดตเดพเดฆเดเตเดเตพ:
action
- เดเดตเดถเตเดฏเดฎเดพเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดจเด:archive_table
,get_table_references
เด เดฅเดตเดพget_rows_references
.
เดชเตเดฐเดฟเดเตเด เดตเดพเดฆเดเตเดเตพ:
--config_path
- เดเตเตบเดซเดฟเดเดฑเตเดทเตป เดซเดฏเดฒเดฟเดฒเตเดเตเดเตเดณเตเดณ เดชเดพเดค;--table
- เดจเดฟเดเตเดเตพ เดเดฐเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด เดจเดเดคเตเดคเตเดฃเตเด เดเดฐเต เดชเดเตเดเดฟเด;--ids
- เดเตเดฎเดเดณเดพเตฝ เดตเตเตผเดคเดฟเดฐเดฟเดเตเด เดเดกเดฟเดฏเตเดเต เดฒเดฟเดธเตเดฑเตเดฑเต, เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต,1,2,3
(เดเดชเตเดทเดฃเตฝ เดชเดพเดฐเดพเดฎเตเดฑเตเดฑเตผ);--log_path
- เดฒเตเดเตเดเตพเดเตเดเตเดณเตเดณ เดซเตเตพเดกเดฑเดฟเดฒเตเดเตเดเตเดณเตเดณ เดชเดพเดค (เดเดชเตเดทเดฃเตฝ เดชเดพเดฐเดพเดฎเตเดฑเตเดฑเตผ, เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ - เดนเตเด เดซเตเตพเดกเตผ);--log_level
- เดฒเตเดเดฟเดเดเต เดฒเตเดตเตฝ (เดเดชเตเดทเดฃเตฝ เดชเดพเดฐเดพเดฎเตเดฑเตเดฑเตผ, เดกเดฟเดซเตเตพเดเตเดเต INFO เดเดฃเต).
เดเดฎเดพเตปเดกเต เดเดฆเดพเดนเดฐเดฃเดเตเดเตพ
เดเดฐเต เดชเดเตเดเดฟเด เดเตผเดเตเดเตเดตเตเดเตเดฏเตเดฏเตเดจเตเดจเต
เดฏเตเดเตเดเดฟเดฒเดฟเดฑเตเดฑเดฟเดฏเตเดเต เดชเตเดฐเดงเดพเดจ เดชเตเดฐเดตเตผเดคเตเดคเดจเด เดกเดพเดฑเตเดฑ เดเตผเดเตเดเตเดตเดฟเดเดเต เดเดฃเต, เด เดคเดพเดฏเดคเต. เดชเตเดฐเดงเดพเดจ เดชเดเตเดเดฟเดเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดเตผเดเตเดเตเดตเต เดชเดเตเดเดฟเดเดฏเดฟเดฒเตเดเตเดเต เดตเดฐเดฟเดเตพ เดเตเดฎเดพเดฑเตเดจเตเดจเต (เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดชเดเตเดเดฟเดเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดชเตเดธเตเดคเดเดเตเดเตพ ะฒ เดชเตเดธเตเดคเดเดเตเดเตพ_เดเตผเดเตเดเตเดตเต).
เดเตผเดเตเดเตเดตเต เดเตเดฏเตเดฏเดพเดคเตเดฏเตเดณเตเดณ เดเดฒเตเดฒเดพเดคเดพเดเตเดเดฒเตเด เดชเดฟเดจเตเดคเตเดฃเดฏเตเดเตเดเตเดจเตเดจเต: เดเดคเดฟเดจเดพเดฏเดฟ เดจเดฟเดเตเดเตพ config.ini-เตฝ เดชเดฐเดพเดฎเตเดฑเตเดฑเตผ เดธเดเตเดเตเดเดฐเดฟเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต. to_archive = เดคเตเดฑเตเดฑเต).
เดเดตเดถเตเดฏเดฎเดพเดฏ เดชเดพเดฐเดพเดฎเตเดฑเตเดฑเดฑเตเดเตพ - config_path, เดชเดเตเดเดฟเด, เดเดกเดฟเดเตพ.
เดธเดฎเดพเดฐเดเดญเดฟเดเตเดเดคเดฟเดจเต เดถเตเดทเด, เดฑเตเดเตเดเตเตผเดกเตเดเตพ เดเดตเตผเดคเตเดคเดฟเดเตเดเต เดเดฒเตเดฒเดพเดคเดพเดเตเดเดชเตเดชเตเดเตเด ids
เดชเดเตเดเดฟเดเดฏเดฟเตฝ table
เด
เดคเดฟเดจเต เดชเดฐเดพเดฎเตผเดถเดฟเดเตเดเตเดจเตเดจ เดเดฒเตเดฒเดพ เดชเดเตเดเดฟเดเดเดณเดฟเดฒเตเด.
$ pggraph archive_table --config_path config.hw.local.ini --table flights --ids 1,2,3
2020-06-20 19:27:44 INFO: flights - START
2020-06-20 19:27:44 INFO: flights - start archive_recursive 3 rows (depth=0)
2020-06-20 19:27:44 INFO: START ARCHIVE REFERRING TABLES
2020-06-20 19:27:44 INFO: ticket_flights - start archive_recursive 3 rows (depth=1)
2020-06-20 19:27:44 INFO: START ARCHIVE REFERRING TABLES
2020-06-20 19:27:44 INFO: boarding_passes - start archive_recursive 3 rows (depth=2)
2020-06-20 19:27:44 INFO: START ARCHIVE REFERRING TABLES
2020-06-20 19:27:44 INFO: END ARCHIVE REFERRING TABLES
2020-06-20 19:27:44 INFO: boarding_passes - archive_by_ids 3 rows by ticket_no, flight_id
2020-06-20 19:27:44 INFO: boarding_passes - start archive_recursive 3 rows (depth=2)
2020-06-20 19:27:44 INFO: START ARCHIVE REFERRING TABLES
2020-06-20 19:27:44 INFO: END ARCHIVE REFERRING TABLES
2020-06-20 19:27:44 INFO: boarding_passes - archive_by_ids 3 rows by ticket_no, flight_id
2020-06-20 19:27:44 INFO: boarding_passes - start archive_recursive 3 rows (depth=2)
2020-06-20 19:27:44 INFO: START ARCHIVE REFERRING TABLES
2020-06-20 19:27:44 INFO: END ARCHIVE REFERRING TABLES
2020-06-20 19:27:44 INFO: boarding_passes - archive_by_ids 3 rows by ticket_no, flight_id
2020-06-20 19:27:44 INFO: boarding_passes - start archive_recursive 3 rows (depth=2)
2020-06-20 19:27:44 INFO: START ARCHIVE REFERRING TABLES
2020-06-20 19:27:44 INFO: END ARCHIVE REFERRING TABLES
2020-06-20 19:27:44 INFO: boarding_passes - archive_by_ids 3 rows by ticket_no, flight_id
2020-06-20 19:27:44 INFO: END ARCHIVE REFERRING TABLES
2020-06-20 19:27:44 INFO: ticket_flights - archive_by_ids 3 rows by ticket_no, flight_id
2020-06-20 19:27:44 INFO: END ARCHIVE REFERRING TABLES
2020-06-20 19:27:44 INFO: flights - archive_by_ids 3 rows by id
2020-06-20 19:27:44 INFO: flights - END
เดเดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตโเด เดชเดเตเดเดฟเดเดฏเตโเดเตเดเดพเดฏเตเดณเตเดณ เดกเดฟเดชเตปเดกเตปเดธเดฟเดเตพ เดเดฃเตเดเตเดคเตเดคเตเด
เดเดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเด เดชเดเตเดเดฟเดเดฏเตเดเต เดกเดฟเดชเตปเดกเตปเดธเดฟเดเตพ เดเดฃเตเดเตเดคเตเดคเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดชเตเดฐเดตเตผเดคเตเดคเดจเด table
. เดเดตเดถเตเดฏเดฎเดพเดฏ เดชเดพเดฐเดพเดฎเตเดฑเตเดฑเดฑเตเดเตพ - config_path
ะธ table
.
เดธเดฎเดพเดฐเดเดญเดฟเดเตเดเดคเดฟเดจเต เดถเตเดทเด, เดธเตเดเตเดฐเตเดจเดฟเตฝ เดเดฐเต เดจเดฟเดเดฃเตเดเต เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเดเตเดเตเด, เดเดตเดฟเดเต:
in_refs
- เดคเดจเตเดจเดฟเดฐเดฟเดเตเดเตเดจเตเดจ เดเดจเตเดจเดฟเดจเต เดชเดฐเดพเดฎเตผเดถเดฟเดเตเดเตเดจเตเดจ เดชเดเตเดเดฟเดเดเดณเตเดเต เดเดฐเต เดจเดฟเดเดฃเตเดเต, เดเดตเดฟเดเต เดเต เดเดจเตเดจเดคเต เดชเดเตเดเดฟเดเดฏเตเดเต เดชเตเดฐเดพเดฃเต, เดฎเตเดฒเตเดฏเด เดตเดฟเดฆเตเดถ เดเต เดเดฌเตโเดเดเตเดฑเตเดฑเตเดเดณเตเดเต เดเดฐเต เดชเดเตเดเดฟเดเดฏเดพเดฃเต (pk_main
- เดชเตเดฐเดงเดพเดจ เดชเดเตเดเดฟเดเดฏเดฟเดฒเต เดชเตเดฐเดพเดฅเดฎเดฟเด เดเต,pk_ref
- เดฑเดซเดฑเตปเดธเต เดชเดเตเดเดฟเดเดฏเดฟเดฒเต เดชเตเดฐเดพเดฅเดฎเดฟเด เดเต,fk_ref
- เดธเตเดดเตเดธเต เดเตเดฌเดฟเดณเดฟเดจเตเดฑเต เดตเดฟเดฆเตเดถ เดเต เดเดฏ เดจเดฟเดฐเดฏเตเดเต เดชเตเดฐเต);out_refs
- เดเดคเต เดธเตเดเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจ เดชเดเตเดเดฟเดเดเดณเตเดเต เดเดฐเต เดจเดฟเดเดฃเตเดเต.
$ pggraph get_table_references --config_path config.hw.local.ini --table flights
{'in_refs': {'ticket_flights': [ForeignKey(pk_main='flight_id', pk_ref='ticket_no, flight_id', fk_ref='flight_id')]},
'out_refs': {'aircrafts': [ForeignKey(pk_main='aircraft_code', pk_ref='flight_id', fk_ref='aircraft_code')],
'airports': [ForeignKey(pk_main='airport_code', pk_ref='flight_id', fk_ref='arrival_airport'),
ForeignKey(pk_main='airport_code', pk_ref='flight_id', fk_ref='departure_airport')]}}
เดจเดฟเตผเดฆเตเดฆเดฟเดทเตโเด เดชเตเดฐเตเดฎเดฑเดฟ เดเต เดเดชเดฏเตเดเดฟเดเตเดเต เดธเตโเดเตเดฐเดฟเดเดเตเดเดณเดฟเดฒเตเดเตเดเตเดณเตเดณ เดฑเดซเดฑเตปเดธเตเดเตพ เดเดฃเตเดเตเดคเตเดคเตเดจเตเดจเต
เดซเตเดฑเดฟเตป เดเต เดตเดดเดฟ เดตเดฐเดฟเดเดณเต เดชเดฐเดพเดฎเตผเดถเดฟเดเตเดเตเดจเตเดจ เดฎเดฑเตเดฑเต เดชเดเตเดเดฟเดเดเดณเดฟเดฒเต เดตเดฐเดฟเดเตพ เดคเดฟเดฐเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดชเตเดฐเดตเตผเดคเตเดคเดจเด ids
เดชเดเตเดเดฟเดเดเตพ table
. เดเดตเดถเตเดฏเดฎเดพเดฏ เดชเดพเดฐเดพเดฎเตเดฑเตเดฑเดฑเตเดเตพ - config_path
, table
ะธ ids
.
เดธเดฎเดพเดฐเดเดญเดฟเดเตเดเดคเดฟเดจเต เดถเตเดทเด, เดเดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดเดเดจเดฏเตเดณเตเดณ เดเดฐเต เดจเดฟเดเดฃเตเดเต เดธเตเดเตเดฐเตเดจเดฟเตฝ เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเดเตเดเตเด:
{
pk_id_1: {
reffering_table_name_1: {
foreign_key_1: [
{row_pk_1: value, row_pk_2: value},
...
],
...
},
...
},
pk_id_2: {...},
...
}
เดเดฆเดพเดนเดฐเดฃ เดเตเตพ:
$ pggraph get_rows_references --config_path config.hw.local.ini --table flights --ids 1,2,3
{1: {'ticket_flights': {'flight_id': [{'flight_id': 1,
'ticket_no': '0005432816945'},
{'flight_id': 1,
'ticket_no': '0005432816941'}]}},
2: {'ticket_flights': {'flight_id': [{'flight_id': 2,
'ticket_no': '0005433101832'},
{'flight_id': 2,
'ticket_no': '0005433101864'},
{'flight_id': 2,
'ticket_no': '0005432919715'}]}},
3: {'ticket_flights': {'flight_id': [{'flight_id': 3,
'ticket_no': '0005432817560'},
{'flight_id': 3,
'ticket_no': '0005432817568'},
{'flight_id': 3,
'ticket_no': '0005432817559'}]}}}
เดเตเดกเดฟเดฒเต เดเดชเดฏเตเดเด
เดเตบเดธเตเดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดชเตเดฑเดฎเต, เดฒเตเดฌเตเดฐเดฑเดฟ เดชเตเดคเตเดคเตบ เดเตเดกเดฟเดฒเตเด เดเดชเดฏเตเดเดฟเดเตเดเดพเด. iPython เดธเดเดตเตเดฆเดจเดพเดคเตเดฎเด เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเดฏเดฟเดฒเต เดเตเดณเตเดเดณเตเดเต เดเดฆเดพเดนเดฐเดฃเดเตเดเตพ เดเตเดตเดเต เดเดพเดฃเดฟเดเตเดเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต.
เดเดฐเต เดชเดเตเดเดฟเด เดเตผเดเตเดเตเดตเตเดเตเดฏเตเดฏเตเดจเตเดจเต
>>> from pg_graph.main import setup_logging
>>> setup_logging(log_level='DEBUG')
>>> from pg_graph.api import PgGraphApi
>>> api = PgGraphApi('config.hw.local.ini')
>>> api.archive_table('flights', [4,5])
2020-06-20 23:12:08 INFO: flights - START
2020-06-20 23:12:08 INFO: flights - start archive_recursive 2 rows (depth=0)
2020-06-20 23:12:08 INFO: START ARCHIVE REFERRING TABLES
2020-06-20 23:12:08 DEBUG: ticket_flights - ForeignKey(pk_main='flight_id', pk_ref='flight_id, ticket_no', fk_ref='flight_id')
2020-06-20 23:12:08 DEBUG: SQL('SELECT flight_id, ticket_no FROM bookings.ticket_flights WHERE (flight_id) IN (%s, %s)')
2020-06-20 23:12:08 INFO: ticket_flights - start archive_recursive 30 rows (depth=1)
2020-06-20 23:12:08 INFO: START ARCHIVE REFERRING TABLES
2020-06-20 23:12:08 DEBUG: boarding_passes - ForeignKey(pk_main='flight_id, ticket_no', pk_ref='flight_id, ticket_no', fk_ref='flight_id, ticket_no')
2020-06-20 23:12:08 INFO: boarding_passes - archive_by_fk 30 rows by ForeignKey(pk_main='flight_id, ticket_no', pk_ref='flight_id, ticket_no', fk_ref='flight_id, ticket_no')
2020-06-20 23:12:08 DEBUG: SQL('CREATE TABLE IF NOT EXISTS bookings.boarding_passes_archive (LIKE bookings.boarding_passes)')
2020-06-20 23:12:08 DEBUG: DELETE FROM boarding_passes by FK flight_id, ticket_no - 30 rows
2020-06-20 23:12:08 INFO: END ARCHIVE REFERRING TABLES
2020-06-20 23:12:08 INFO: ticket_flights - archive_by_ids 30 rows by flight_id, ticket_no
2020-06-20 23:12:08 DEBUG: SQL('CREATE TABLE IF NOT EXISTS bookings.ticket_flights_archive (LIKE bookings.ticket_flights)')
2020-06-20 23:12:08 DEBUG: DELETE FROM ticket_flights by flight_id, ticket_no - 30 rows
2020-06-20 23:12:08 DEBUG: INSERT INTO ticket_flights_archive - 30 rows
2020-06-20 23:12:08 INFO: ticket_flights - start archive_recursive 30 rows (depth=1)
2020-06-20 23:12:08 INFO: START ARCHIVE REFERRING TABLES
2020-06-20 23:12:08 DEBUG: boarding_passes - ForeignKey(pk_main='flight_id, ticket_no', pk_ref='flight_id, ticket_no', fk_ref='flight_id, ticket_no')
2020-06-20 23:12:08 INFO: boarding_passes - archive_by_fk 30 rows by ForeignKey(pk_main='flight_id, ticket_no', pk_ref='flight_id, ticket_no', fk_ref='flight_id, ticket_no')
2020-06-20 23:12:08 DEBUG: SQL('CREATE TABLE IF NOT EXISTS bookings.boarding_passes_archive (LIKE bookings.boarding_passes)')
2020-06-20 23:12:08 DEBUG: DELETE FROM boarding_passes by FK flight_id, ticket_no - 30 rows
2020-06-20 23:12:08 INFO: END ARCHIVE REFERRING TABLES
2020-06-20 23:12:08 INFO: ticket_flights - archive_by_ids 30 rows by flight_id, ticket_no
2020-06-20 23:12:08 DEBUG: SQL('CREATE TABLE IF NOT EXISTS bookings.ticket_flights_archive (LIKE bookings.ticket_flights)')
2020-06-20 23:12:08 DEBUG: DELETE FROM ticket_flights by flight_id, ticket_no - 30 rows
2020-06-20 23:12:08 DEBUG: INSERT INTO ticket_flights_archive - 30 rows
2020-06-20 23:12:08 INFO: ticket_flights - start archive_recursive 30 rows (depth=1)
2020-06-20 23:12:08 INFO: START ARCHIVE REFERRING TABLES
2020-06-20 23:12:08 DEBUG: boarding_passes - ForeignKey(pk_main='flight_id, ticket_no', pk_ref='flight_id, ticket_no', fk_ref='flight_id, ticket_no')
2020-06-20 23:12:08 INFO: boarding_passes - archive_by_fk 30 rows by ForeignKey(pk_main='flight_id, ticket_no', pk_ref='flight_id, ticket_no', fk_ref='flight_id, ticket_no')
2020-06-20 23:12:08 DEBUG: SQL('CREATE TABLE IF NOT EXISTS bookings.boarding_passes_archive (LIKE bookings.boarding_passes)')
2020-06-20 23:12:08 DEBUG: DELETE FROM boarding_passes by FK flight_id, ticket_no - 30 rows
2020-06-20 23:12:08 INFO: END ARCHIVE REFERRING TABLES
2020-06-20 23:12:08 INFO: ticket_flights - archive_by_ids 30 rows by flight_id, ticket_no
2020-06-20 23:12:08 DEBUG: SQL('CREATE TABLE IF NOT EXISTS bookings.ticket_flights_archive (LIKE bookings.ticket_flights)')
2020-06-20 23:12:08 DEBUG: DELETE FROM ticket_flights by flight_id, ticket_no - 30 rows
2020-06-20 23:12:08 DEBUG: INSERT INTO ticket_flights_archive - 30 rows
2020-06-20 23:12:08 INFO: ticket_flights - start archive_recursive 3 rows (depth=1)
2020-06-20 23:12:08 INFO: START ARCHIVE REFERRING TABLES
2020-06-20 23:12:08 DEBUG: boarding_passes - ForeignKey(pk_main='flight_id, ticket_no', pk_ref='flight_id, ticket_no', fk_ref='flight_id, ticket_no')
2020-06-20 23:12:08 INFO: boarding_passes - archive_by_fk 3 rows by ForeignKey(pk_main='flight_id, ticket_no', pk_ref='flight_id, ticket_no', fk_ref='flight_id, ticket_no')
2020-06-20 23:12:08 DEBUG: SQL('CREATE TABLE IF NOT EXISTS bookings.boarding_passes_archive (LIKE bookings.boarding_passes)')
2020-06-20 23:12:08 DEBUG: DELETE FROM boarding_passes by FK flight_id, ticket_no - 3 rows
2020-06-20 23:12:08 INFO: END ARCHIVE REFERRING TABLES
2020-06-20 23:12:08 INFO: ticket_flights - archive_by_ids 3 rows by flight_id, ticket_no
2020-06-20 23:12:08 DEBUG: SQL('CREATE TABLE IF NOT EXISTS bookings.ticket_flights_archive (LIKE bookings.ticket_flights)')
2020-06-20 23:12:08 DEBUG: DELETE FROM ticket_flights by flight_id, ticket_no - 3 rows
2020-06-20 23:12:08 DEBUG: INSERT INTO ticket_flights_archive - 3 rows
2020-06-20 23:12:08 INFO: END ARCHIVE REFERRING TABLES
2020-06-20 23:12:08 INFO: flights - archive_by_ids 2 rows by flight_id
2020-06-20 23:12:09 DEBUG: SQL('CREATE TABLE IF NOT EXISTS bookings.flights_archive (LIKE bookings.flights)')
2020-06-20 23:12:09 DEBUG: DELETE FROM flights by flight_id - 2 rows
2020-06-20 23:12:09 DEBUG: INSERT INTO flights_archive - 2 rows
2020-06-20 23:12:09 INFO: flights - END
เดเดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตโเด เดชเดเตเดเดฟเดเดฏเตโเดเตเดเดพเดฏเตเดณเตเดณ เดกเดฟเดชเตปเดกเตปเดธเดฟเดเตพ เดเดฃเตเดเตเดคเตเดคเตเด
>>> from pg_graph.api import PgGraphApi
>>> from pprint import pprint
>>> api = PgGraphApi('config.hw.local.ini')
>>> res = api.get_table_references('flights')
>>> pprint(res)
{'in_refs': {'ticket_flights': [ForeignKey(pk_main='flight_id', pk_ref='flight_id, ticket_no', fk_ref='flight_id')]},
'out_refs': {'aircrafts': [ForeignKey(pk_main='aircraft_code', pk_ref='flight_id', fk_ref='aircraft_code')],
'airports': [ForeignKey(pk_main='airport_code', pk_ref='flight_id', fk_ref='arrival_airport'),
ForeignKey(pk_main='airport_code', pk_ref='flight_id', fk_ref='departure_airport')]}}
เดจเดฟเตผเดฆเตเดฆเดฟเดทเตโเด เดชเตเดฐเตเดฎเดฑเดฟ เดเต เดเดชเดฏเตเดเดฟเดเตเดเต เดธเตโเดเตเดฐเดฟเดเดเตเดเดณเดฟเดฒเตเดเตเดเตเดณเตเดณ เดฑเดซเดฑเตปเดธเตเดเตพ เดเดฃเตเดเตเดคเตเดคเตเดจเตเดจเต
>>> from pg_graph.api import PgGraphApi
>>> from pprint import pprint
>>> api = PgGraphApi('config.hw.local.ini')
>>> rows = api.get_rows_references('flights', [1,2,3])
>>> pprint(rows)
{1: {'ticket_flights': {'flight_id': [{'flight_id': 1,
'ticket_no': '0005432816945'},
{'flight_id': 1,
'ticket_no': '0005432816941'}]}},
2: {'ticket_flights': {'flight_id': [{'flight_id': 2,
'ticket_no': '0005433101832'},
{'flight_id': 2,
'ticket_no': '0005433101864'},
{'flight_id': 2,
'ticket_no': '0005432919715'}]}},
3: {'ticket_flights': {'flight_id': [{'flight_id': 3,
'ticket_no': '0005432817560'},
{'flight_id': 3,
'ticket_no': '0005432817568'},
{'flight_id': 3,
'ticket_no': '0005432817559'}]}}}
เดฒเตเดฌเตเดฐเดฑเดฟ เดธเตเดดเตเดธเต เดเตเดกเต เดเดตเดฟเดเต เดฒเดญเตเดฏเดฎเดพเดฃเต
เด เดญเดฟเดชเตเดฐเดพเดฏเดเตเดเตพ, เดชเตเดฐเดคเดฟเดฌเดฆเตเดงเดคเดเตพ, เดจเดฟเตผเดฆเตเดฆเตเดถเดเตเดเตพ เดเดจเตเดจเดฟเดตเดฏเดฟเตฝ เดเดพเตป เดธเดจเตเดคเตเดทเดฟเดเตเดเตเด.
เดเดตเดฟเดเตเดฏเตเด เดฑเดฟเดชเตเดชเตเดธเดฟเดฑเตเดฑเดฑเดฟเดฏเดฟเดฒเตเด เดเดจเตเดฑเต เดเดดเดฟเดตเดฟเดจเตเดฑเต เดชเดฐเดฎเดพเดตเดงเดฟ เดเตเดฆเตเดฏเดเตเดเตพเดเตเดเต เดเดคเตเดคเดฐเด เดจเตฝเดเดพเตป เดเดพเตป เดถเตเดฐเดฎเดฟเดเตเดเตเด.
เด
เดตเดฒเดเดฌเด: www.habr.com