เจ
เฉฑเจ เจฎเฉเจ เจนเฉเจฌเจฐ เจชเจพเจ เจเจพเจ เจจเฉเฉฐ PostgreSQL DBMS เจตเจฟเฉฑเจ เจเฉเจฌเจฒ เจจเจฟเจฐเจญเจฐเจคเจพ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจจ เจฒเจ เจชเจพเจเจฅเจจ เจตเจฟเฉฑเจ เจฒเจฟเจเฉ เจเฉฑเจ เจเจชเจฏเฉเจเจคเจพ เจฆเฉ เจจเจพเจฒ เจชเฉเจธเจผ เจเจฐเจจเจพ เจเจพเจนเฉเฉฐเจฆเจพ เจนเจพเจเฅค
เจเจชเจฏเฉเจเจคเจพ เจฆเจพ API เจธเจงเจพเจฐเจจ เจนเฉ เจ เจคเฉ เจเจธ เจตเจฟเฉฑเจ เจคเจฟเฉฐเจจ เจคเจฐเฉเจเฉ เจนเจจ:
- เจชเฉเจฐเจพเจฒเฉเจ_เจธเจพเจฐเจฃเฉ - เจจเจฟเจธเจผเจเจฟเจค เจชเฉเจฐเจพเจเจฎเจฐเฉ เจเฉเฉฐเจเฉเจเจ เจฆเฉ เจจเจพเจฒ เจฐเฉเจเจฐเจธเจฟเจต เจเจฐเจเจพเจเจตเจฟเฉฐเจ / เจเจคเจพเจฐเจพเจ เจจเฉเฉฐ เจฎเจฟเจเจพเจเจฃเจพ
- เจชเฉเจฐเจพเจชเจค_เจธเจพเจฐเจฃเฉ_เจนเจตเจพเจฒเฉ โ เจเฉฑเจ เจเฉเจฌเจฒ เจฒเจ เจจเจฟเจฐเจญเจฐเจคเจพเจตเจพเจ เจฆเฉ เจเฉเจ เจเจฐเฉ (เจจเจฟเจฐเจงเจพเจฐเจค เจเฉเจฌเจฒ เจ เจคเฉ เจเจธ เจฆเจพ เจนเจตเจพเจฒเจพ เจฆเฉเจฃ เจตเจพเจฒเฉ เจฆเฉเจเจฐเจพ เจนเจตเจพเจฒเจพ เจฆเจฟเฉฑเจคเจพ เจเจพเจตเฉเจเจพ)
- เจชเฉเจฐเจพเจชเจค_เจเจคเจพเจฐเจพเจ_เจนเจตเจพเจฒเฉ - เจนเฉเจฐ เจธเจพเจฐเจฃเฉเจเจ เจตเจฟเฉฑเจ เจเจคเจพเจฐเจพเจ เจฆเฉ เจเฉเจ เจเจฐเฉ เจเฉ เจฒเฉเฉเฉเจเจฆเฉ เจธเจพเจฐเจฃเฉ เจตเจฟเฉฑเจ เจจเจฟเจฐเจงเจพเจฐเจค เจเจคเจพเจฐเจพเจ เจฆเจพ เจนเจตเจพเจฒเจพ เจฆเจฟเฉฐเจฆเฉเจเจ เจนเจจ
prehistory
เจฎเฉเจฐเจพ เจจเจพเจฎ เจเจฒเฉเจ เจฌเฉเจฐเจเจผเฉเจต เจนเฉ, เจฎเฉเจ เจกเฉเจฎเจเจฒเจฟเจ เจตเจฟเฉฑเจ เจฎเฉเจฐเจเฉเจ เจเจงเจพเจฐ เจชเฉเจฐเจฌเฉฐเจงเจเจพเจ เจฒเจ CRM เจเฉเจฎ เจตเจฟเฉฑเจ เจเฉฑเจ เจกเจฟเจตเฉเจฒเจชเจฐ เจนเจพเจเฅค
เจธเจพเจกเฉ CRM เจธเจฟเจธเจเจฎ เจฆเจพ เจฎเฉเฉฑเจ เจกเฉเจเจพเจฌเฉเจธ เจเฉฐเจชเจจเฉ เจตเจฟเฉฑเจ เจตเฉเจฒเจฏเฉเจฎ เจฆเฉ เจฎเจพเจฎเจฒเฉ เจตเจฟเฉฑเจ เจธเจญ เจคเฉเจ เจตเฉฑเจกเจพ เจนเฉเฅค เจเจน เจธเจญ เจคเฉเจ เจชเฉเจฐเจพเจฃเฉเจเจ เจตเจฟเฉฑเจเฉเจ เจเฉฑเจ เจตเฉ เจนเฉ: เจเจน เจชเฉเจฐเฉเจเฉเจเจ เจฆเฉ เจฌเจนเฉเจค เจนเฉ เจฒเจพเจเจ 'เจคเฉ เจชเฉเจฐเจเจ เจนเฉเจเจ เจธเฉ, เจเจฆเฉเจ เจฐเฉเฉฑเจ เจตเฉฑเจกเฉ เจธเจจ, เจกเฉเจฎเจเจฒเจฟเจ เจเฉฑเจ เจธเจผเฉเจฐเฉเจเจค เจธเฉ, เจ เจคเฉ เจเฉฑเจ เจซเฉเจธเจผเจจเฉเจฌเจฒ เจชเจพเจเจฅเจจ เจ เจธเจฟเฉฐเจเฉเจฐเฉเจจเจธ เจซเจฐเฉเจฎเจตเจฐเจ 'เจคเฉ เจฎเจพเจเจเฉเจฐเฉเจธเจฐเจตเจฟเจธ เจฆเฉ เจฌเจเจพเจ PHP เจตเจฟเฉฑเจ เจเฉฑเจ เจตเจฟเจธเจผเจพเจฒ เจฎเฉเจจเฉเจฒเจฟเจฅ เจธเฉเฅค
PHP เจคเฉเจ Python เจตเจฟเฉฑเจ เจคเจฌเจฆเฉเจฒเฉ เจฌเจนเฉเจค เจฒเฉฐเจฎเฉ เจธเฉ เจ เจคเฉ เจฆเฉเจจเจพเจ เจธเจฟเจธเจเจฎเจพเจ เจฆเฉ เจเฉฑเจเฉ เจธเจฎเฉเจ เจธเจนเจฟเจฏเฉเจ เจฆเฉ เจฒเฉเฉ เจธเฉ, เจเจฟเจธ เจจเฉ เจกเฉเจเจพเจฌเฉเจธ เจฆเฉ เจกเจฟเจเจผเจพเจเจจ เจจเฉเฉฐ เจชเฉเจฐเจญเจพเจตเจฟเจค เจเฉเจคเจพเฅค
เจจเจคเฉเจเฉ เจตเจเฉเจ, เจธเจพเจกเฉ เจเฉเจฒ เจตเฉฑเจ-เจตเฉฑเจ เจเจฟเจธเจฎเจพเจ เจฆเฉเจเจ เจชเฉเฉฑเจเจเจฟเฉฑเจเจพเจ เจฒเจ เจธเฉเจเจเจพเจเจ เจฆเฉ เจเฉเฉฐเจก เจฆเฉ เจจเจพเจฒ เจฌเจนเฉเจค เจธเจพเจฐเฉ เจเฉฑเจ เจเฉเฉเฉ เจนเฉเจ เจ เจคเฉ เจตเจฟเจธเจผเจพเจฒ เจเฉเจฌเจฒเจพเจ เจตเจพเจฒเจพ เจเฉฑเจ เจกเฉเจเจพเจฌเฉเจธ เจนเฉเฅค เจเจน เจธเจญ เจกเจพเจเจพเจฌเฉเจธ เจฆเฉ เจเจพเจฐเจเฉเจเจผเจพเจฐเฉ เจจเฉเฉฐ เจจเจเจพเจฐเจพเจคเจฎเจ เจคเฉเจฐ 'เจคเฉ เจชเฉเจฐเจญเจพเจตเจค เจเจฐเจฆเจพ เจนเฉ: เจตเฉฑเจกเฉเจเจ เจเฉเจฌเจฒเจพเจ เจ เจคเฉ เจเจนเจจเจพเจ เจตเจฟเจเจเจพเจฐ เจธเจฌเฉฐเจงเจพเจ เจฆเฉ เจเฉเฉฐเจก เจฆเฉ เจเจพเจฐเจจ, เจธเจตเจพเจฒเจพเจ เจฆเฉ เจเฉเฉฐเจเจฒเจคเจพ เจฒเจเจพเจคเจพเจฐ เจตเจง เจฐเจนเฉ เจนเฉ, เจเฉ เจเจฟ เจธเจญ เจคเฉเจ เจตเฉฑเจง เจฒเฉเจก เจเฉเจคเฉ เจเฉเจฌเจฒเจพเจ เจฒเจ เจเจพเจธ เจคเฉเจฐ 'เจคเฉ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจนเฉ.
เจกเฉเจเจพเจฌเฉเจธ 'เจคเฉ เจฒเฉเจก เจจเฉเฉฐ เจเจเจพเจเจฃ เจฒเจ, เจ
เจธเฉเจ เจเฉฑเจ เจธเจเฉเจฐเจฟเจชเจ เจฒเจฟเจเจฃ เจฆเจพ เจซเฉเจธเจฒเจพ เจเฉเจคเจพ เจนเฉ เจเฉ เจชเฉเจฐเจพเจฃเฉ เจฐเจฟเจเจพเจฐเจกเจพเจ เจจเฉเฉฐ เจธเจญ เจคเฉเจ เจตเฉฑเจกเฉเจเจ เจ
เจคเฉ เจฒเฉเจก เจเฉเจคเฉเจเจ เจเฉเจฌเจฒเจพเจ เจคเฉเจ เจชเฉเจฐเจพเจฒเฉเจเจพเจ เจตเจฟเฉฑเจ เจคเจฌเจฆเฉเจฒ เจเจฐ เจฆเฉเจตเฉเจเฉ (เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจคเฉเจ task
ะฒ task_archive
).
เจเจน เจเฉฐเจฎ เจเฉเจฌเจฒเจพเจ เจฆเฉ เจตเจฟเจเจเจพเจฐ เจตเฉฑเจกเฉ เจเจฟเจฃเจคเฉ เจตเจฟเฉฑเจ เจธเจฌเฉฐเจงเจพเจ เจฆเฉเจเจฐเจพ เจเฉเฉฐเจเจฒเจฆเจพเจฐ เจนเฉ: เจฌเจธ เจเจธ เจคเฉเจ เจเจคเจพเจฐเจพเจ เจจเฉเฉฐ เจนเจฟเจฒเจพเจ task
ะฒ task_archive
เจเจน เจเจพเจซเจผเฉ เจจเจนเฉเจ เจนเฉ, เจเจธ เจคเฉเจ เจชเจนเจฟเจฒเจพเจ เจคเฉเจนเจพเจจเฉเฉฐ เจเจนเจจเจพเจ เจธเจพเจฐเฉ เจนเจตเจพเจฒเจฟเจเจ เจฆเฉ เจจเจพเจฒ เจตเจพเจฐ-เจตเจพเจฐ เจ
เจเจฟเจนเจพ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ task
เจเฉเจฌเจฒ
เจฎเฉเจ เจเฉฑเจ เจเจฆเจพเจนเจฐเจฃ เจฆเฉ เจจเจพเจฒ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจเจฐเจพเจเจเจพ
เจฎเฉฐเจจ เจฒเจ เจเจฟ เจธเจพเจจเฉเฉฐ เจเฉเจฌเจฒ เจคเฉเจ เจฐเจฟเจเจพเจฐเจก เจฎเจฟเจเจพเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ Flights
. เจชเฉเจธเจเจเฉเจฐเฉเจธ เจธเจพเจจเฉเฉฐ เจเจธ เจคเจฐเฉเจนเจพเจ เจเจฐเจจ เจฆเฉ เจเจเจพเจเจผเจค เจจเจนเฉเจ เจฆเฉเจตเฉเจเจพ: เจธเจพเจจเฉเฉฐ เจชเจนเจฟเจฒเจพเจ เจธเจพเจฐเฉเจเจ เจนเจตเจพเจฒเจพ เจฆเฉเจฃ เจตเจพเจฒเฉเจเจ เจเฉเจฌเจฒเจพเจ เจคเฉเจ เจฐเจฟเจเจพเจฐเจกเจพเจ เจจเฉเฉฐ เจฎเจฟเจเจพเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉเฉฐเจฆเฉ เจนเฉ, เจ
เจคเฉ เจเจธ เจคเจฐเฉเจนเจพเจ เจฒเจเจพเจคเจพเจฐ เจเฉเจฌเจฒเจพเจ 'เจคเฉ เจเฉ เจเจฟเจธเฉ เจฆเฉเจเจฐเจพ เจนเจตเจพเจฒเจพ เจจเจนเฉเจ เจฆเจฟเฉฑเจคเจพ เจเจพเจเจฆเจพ เจนเฉเฅค
'เจคเฉ เจธเจพเจกเฉ เจเจฆเจพเจนเจฐเจจ เจตเจฟเฉฑเจ Flights
เจนเจตเจพเจฒเจพ เจฆเจฟเฉฐเจฆเจพ เจนเฉ Ticket_flights
, เจ
เจคเฉ เจเจธ 'เจคเฉ - Boarding_passes
.
เจเจธ เจฒเจ, เจคเฉเจนเจพเจจเฉเฉฐ เจเจธ เจเฉเจฐเจฎ เจตเจฟเฉฑเจ เจเจธเจจเฉเฉฐ เจฎเจฟเจเจพเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ:
- เจตเจฟเฉฑเจ เจเจคเจพเจฐเจพเจ เจฆเฉ เจชเฉเจฐเจพเจเจฎเจฐเฉ เจเฉเฉฐเจเฉเจเจ (PK) เจฎเฉเฉฑเจฒ เจชเฉเจฐเจพเจชเจค เจเจฐเจฆเฉ เจนเจจ
Ticket_flights
, เจเฉ เจเจฟ เจฎเจฟเจเจพเจเจเจ เจเจพเจฃ เจตเจพเจฒเฉเจเจ เจเจคเจพเจฐเจพเจ เจฆเจพ เจนเจตเจพเจฒเจพ เจฆเจฟเฉฐเจฆเฉ เจนเจจFlights
. - เจธเจพเจจเฉเฉฐ PK เจเจคเจพเจฐเจพเจ เจฎเจฟเจฒเจฆเฉเจเจ เจนเจจ
Boarding_passes
, เจเจฟเจธ เจฆเจพ เจนเจตเจพเจฒเจพ เจฆเจฟเฉฐเจฆเฉ เจนเจจTicket_flights
. - เจ
เจธเฉเจ เจธเจพเจฐเจฃเฉ เจตเจฟเฉฑเจ เจชเฉเจพเจ
2 เจคเฉเจ เจชเฉเจเฉ เจฆเฉเจเจฐเจพ เจเจคเจพเจฐเจพเจ เจจเฉเฉฐ เจฎเจฟเจเจพเจเจเจฆเฉ เจนเจพเจ
Boarding_passes
. - เจชเจ 1 เจเฉฐเจ เจคเฉเจ เจชเฉเจเฉ เจฆเฉเจเจฐเจพ เจฒเจพเจเจจเจพเจ เจจเฉเฉฐ เจฎเจฟเจเจพเจ
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