diff --git a/doc/sql/snail_job_dm8.sql b/doc/sql/snail_job_dm8.sql index d5d1eff03..14a97ec5a 100644 --- a/doc/sql/snail_job_dm8.sql +++ b/doc/sql/snail_job_dm8.sql @@ -2,7 +2,7 @@ SnailJob Database Transfer Tool Source Server Type : MySQL Target Server Type : DM8 - Date: 2025-02-25 22:17:15 + Date: 2025-04-26 09:59:32 */ @@ -133,7 +133,9 @@ CREATE TABLE sj_retry_dead_letter id bigint NOT NULL PRIMARY KEY IDENTITY, namespace_id varchar(64) DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' NULL, group_name varchar(64) NULL, + group_id bigint NOT NULL, scene_name varchar(64) NULL, + scene_id bigint NOT NULL, idempotent_id varchar(64) NULL, biz_no varchar(64) DEFAULT '' NULL, executor_name varchar(512) DEFAULT '' NULL, @@ -150,7 +152,9 @@ CREATE INDEX idx_sj_retry_dead_letter_04 ON sj_retry_dead_letter (create_dt); COMMENT ON COLUMN sj_retry_dead_letter.id IS '主键'; COMMENT ON COLUMN sj_retry_dead_letter.namespace_id IS '命名空间id'; COMMENT ON COLUMN sj_retry_dead_letter.group_name IS '组名称'; +COMMENT ON COLUMN sj_retry_dead_letter.group_id IS '组Id'; COMMENT ON COLUMN sj_retry_dead_letter.scene_name IS '场景名称'; +COMMENT ON COLUMN sj_retry_dead_letter.scene_id IS '场景ID'; COMMENT ON COLUMN sj_retry_dead_letter.idempotent_id IS '幂等id'; COMMENT ON COLUMN sj_retry_dead_letter.biz_no IS '业务编号'; COMMENT ON COLUMN sj_retry_dead_letter.executor_name IS '执行器名称'; @@ -165,7 +169,9 @@ CREATE TABLE sj_retry id bigint NOT NULL PRIMARY KEY IDENTITY, namespace_id varchar(64) DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' NULL, group_name varchar(64) NULL, + group_id bigint NOT NULL, scene_name varchar(64) NULL, + scene_id bigint NOT NULL, idempotent_id varchar(64) NULL, biz_no varchar(64) DEFAULT '' NULL, executor_name varchar(512) DEFAULT '' NULL, @@ -182,19 +188,19 @@ CREATE TABLE sj_retry update_dt datetime DEFAULT CURRENT_TIMESTAMP NOT NULL ); -CREATE UNIQUE INDEX uk_sj_retry_01 ON sj_retry (namespace_id, group_name, task_type, idempotent_id, deleted); +CREATE UNIQUE INDEX uk_sj_retry_01 ON sj_retry (scene_id, task_type, idempotent_id, deleted); -CREATE INDEX idx_sj_retry_01 ON sj_retry (namespace_id, group_name, scene_name); -CREATE INDEX idx_sj_retry_02 ON sj_retry (namespace_id, group_name, retry_status); -CREATE INDEX idx_sj_retry_03 ON sj_retry (idempotent_id); -CREATE INDEX idx_sj_retry_04 ON sj_retry (biz_no); -CREATE INDEX idx_sj_retry_05 ON sj_retry (parent_id); -CREATE INDEX idx_sj_retry_06 ON sj_retry (create_dt); +CREATE INDEX idx_sj_retry_01 ON sj_retry (biz_no); +CREATE INDEX idx_sj_retry_02 ON sj_retry (retry_status, bucket_index); +CREATE INDEX idx_sj_retry_03 ON sj_retry (parent_id); +CREATE INDEX idx_sj_retry_04 ON sj_retry (create_dt); COMMENT ON COLUMN sj_retry.id IS '主键'; COMMENT ON COLUMN sj_retry.namespace_id IS '命名空间id'; COMMENT ON COLUMN sj_retry.group_name IS '组名称'; +COMMENT ON COLUMN sj_retry.group_id IS '组Id'; COMMENT ON COLUMN sj_retry.scene_name IS '场景名称'; +COMMENT ON COLUMN sj_retry.scene_id IS '场景ID'; COMMENT ON COLUMN sj_retry.idempotent_id IS '幂等id'; COMMENT ON COLUMN sj_retry.biz_no IS '业务编号'; COMMENT ON COLUMN sj_retry.executor_name IS '执行器名称'; diff --git a/doc/sql/snail_job_kingbase.sql b/doc/sql/snail_job_kingbase.sql index 081fb72e7..f77062ef0 100644 --- a/doc/sql/snail_job_kingbase.sql +++ b/doc/sql/snail_job_kingbase.sql @@ -2,7 +2,7 @@ SnailJob Database Transfer Tool Source Server Type : MySQL Target Server Type : KingbaseES - Date: 2025-02-25 22:17:37 + Date: 2025-04-26 10:03:42 */ @@ -30,7 +30,7 @@ COMMENT ON COLUMN sj_namespace.update_dt IS '修改时间'; COMMENT ON TABLE sj_namespace IS '命名空间'; INSERT INTO sj_namespace (id, name, unique_id, create_dt, update_dt, deleted) -VALUES (0, 'Default', '764d604ec6fc45f68cd92514c40e9e1a', now(), now(), 0); +VALUES (1, 'Default', '764d604ec6fc45f68cd92514c40e9e1a', now(), now(), 0); -- sj_group_config CREATE TABLE sj_group_config @@ -133,7 +133,9 @@ CREATE TABLE sj_retry_dead_letter id bigserial PRIMARY KEY, namespace_id varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a', group_name varchar(64) NOT NULL, + group_id bigint NOT NULL, scene_name varchar(64) NOT NULL, + scene_id bigint NOT NULL, idempotent_id varchar(64) NOT NULL, biz_no varchar(64) NULL DEFAULT '', executor_name varchar(512) NULL DEFAULT '', @@ -150,7 +152,9 @@ CREATE INDEX idx_sj_retry_dead_letter_04 ON sj_retry_dead_letter (create_dt); COMMENT ON COLUMN sj_retry_dead_letter.id IS '主键'; COMMENT ON COLUMN sj_retry_dead_letter.namespace_id IS '命名空间id'; COMMENT ON COLUMN sj_retry_dead_letter.group_name IS '组名称'; +COMMENT ON COLUMN sj_retry_dead_letter.group_id IS '组Id'; COMMENT ON COLUMN sj_retry_dead_letter.scene_name IS '场景名称'; +COMMENT ON COLUMN sj_retry_dead_letter.scene_id IS '场景ID'; COMMENT ON COLUMN sj_retry_dead_letter.idempotent_id IS '幂等id'; COMMENT ON COLUMN sj_retry_dead_letter.biz_no IS '业务编号'; COMMENT ON COLUMN sj_retry_dead_letter.executor_name IS '执行器名称'; @@ -165,7 +169,9 @@ CREATE TABLE sj_retry id bigserial PRIMARY KEY, namespace_id varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a', group_name varchar(64) NOT NULL, + group_id bigint NOT NULL, scene_name varchar(64) NOT NULL, + scene_id bigint NOT NULL, idempotent_id varchar(64) NOT NULL, biz_no varchar(64) NULL DEFAULT '', executor_name varchar(512) NULL DEFAULT '', @@ -182,19 +188,19 @@ CREATE TABLE sj_retry update_dt timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ); -CREATE UNIQUE INDEX uk_sj_retry_01 ON sj_retry (namespace_id, group_name, task_type, idempotent_id, deleted); +CREATE UNIQUE INDEX uk_sj_retry_01 ON sj_retry (scene_id, task_type, idempotent_id, deleted); -CREATE INDEX idx_sj_retry_01 ON sj_retry (namespace_id, group_name, scene_name); -CREATE INDEX idx_sj_retry_02 ON sj_retry (namespace_id, group_name, retry_status); -CREATE INDEX idx_sj_retry_03 ON sj_retry (idempotent_id); -CREATE INDEX idx_sj_retry_04 ON sj_retry (biz_no); -CREATE INDEX idx_sj_retry_05 ON sj_retry (parent_id); -CREATE INDEX idx_sj_retry_06 ON sj_retry (create_dt); +CREATE INDEX idx_sj_retry_01 ON sj_retry (biz_no); +CREATE INDEX idx_sj_retry_02 ON sj_retry (retry_status, bucket_index); +CREATE INDEX idx_sj_retry_03 ON sj_retry (parent_id); +CREATE INDEX idx_sj_retry_04 ON sj_retry (create_dt); COMMENT ON COLUMN sj_retry.id IS '主键'; COMMENT ON COLUMN sj_retry.namespace_id IS '命名空间id'; COMMENT ON COLUMN sj_retry.group_name IS '组名称'; +COMMENT ON COLUMN sj_retry.group_id IS '组Id'; COMMENT ON COLUMN sj_retry.scene_name IS '场景名称'; +COMMENT ON COLUMN sj_retry.scene_id IS '场景ID'; COMMENT ON COLUMN sj_retry.idempotent_id IS '幂等id'; COMMENT ON COLUMN sj_retry.biz_no IS '业务编号'; COMMENT ON COLUMN sj_retry.executor_name IS '执行器名称'; diff --git a/doc/sql/snail_job_oracle.sql b/doc/sql/snail_job_oracle.sql index 7c6d62fec..f437a64d4 100644 --- a/doc/sql/snail_job_oracle.sql +++ b/doc/sql/snail_job_oracle.sql @@ -1,9 +1,8 @@ - /* SnailJob Database Transfer Tool Source Server Type : MySQL Target Server Type : Oracle - Date: 2025-02-25 22:16:28 + Date: 2025-04-26 10:01:54 */ @@ -146,7 +145,9 @@ CREATE TABLE sj_retry_dead_letter id number GENERATED ALWAYS AS IDENTITY, namespace_id varchar2(64) DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' NULL, group_name varchar2(64) NULL, + group_id number NOT NULL, scene_name varchar2(64) NULL, + scene_id number NOT NULL, idempotent_id varchar2(64) NULL, biz_no varchar2(64) DEFAULT '' NULL, executor_name varchar2(512) DEFAULT '' NULL, @@ -166,7 +167,9 @@ CREATE INDEX idx_sj_retry_dead_letter_04 ON sj_retry_dead_letter (create_dt); COMMENT ON COLUMN sj_retry_dead_letter.id IS '主键'; COMMENT ON COLUMN sj_retry_dead_letter.namespace_id IS '命名空间id'; COMMENT ON COLUMN sj_retry_dead_letter.group_name IS '组名称'; +COMMENT ON COLUMN sj_retry_dead_letter.group_id IS '组Id'; COMMENT ON COLUMN sj_retry_dead_letter.scene_name IS '场景名称'; +COMMENT ON COLUMN sj_retry_dead_letter.scene_id IS '场景ID'; COMMENT ON COLUMN sj_retry_dead_letter.idempotent_id IS '幂等id'; COMMENT ON COLUMN sj_retry_dead_letter.biz_no IS '业务编号'; COMMENT ON COLUMN sj_retry_dead_letter.executor_name IS '执行器名称'; @@ -181,7 +184,9 @@ CREATE TABLE sj_retry id number GENERATED ALWAYS AS IDENTITY, namespace_id varchar2(64) DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' NULL, group_name varchar2(64) NULL, + group_id number NOT NULL, scene_name varchar2(64) NULL, + scene_id number NOT NULL, idempotent_id varchar2(64) NULL, biz_no varchar2(64) DEFAULT '' NULL, executor_name varchar2(512) DEFAULT '' NULL, @@ -201,19 +206,19 @@ CREATE TABLE sj_retry ALTER TABLE sj_retry ADD CONSTRAINT pk_sj_retry PRIMARY KEY (id); -CREATE UNIQUE INDEX uk_sj_retry_01 ON sj_retry (namespace_id, group_name, task_type, idempotent_id, deleted); +CREATE UNIQUE INDEX uk_sj_retry_01 ON sj_retry (scene_id, task_type, idempotent_id, deleted); -CREATE INDEX idx_sj_retry_01 ON sj_retry (namespace_id, group_name, scene_name); -CREATE INDEX idx_sj_retry_02 ON sj_retry (namespace_id, group_name, retry_status); -CREATE INDEX idx_sj_retry_03 ON sj_retry (idempotent_id); -CREATE INDEX idx_sj_retry_04 ON sj_retry (biz_no); -CREATE INDEX idx_sj_retry_05 ON sj_retry (parent_id); -CREATE INDEX idx_sj_retry_06 ON sj_retry (create_dt); +CREATE INDEX idx_sj_retry_01 ON sj_retry (biz_no); +CREATE INDEX idx_sj_retry_02 ON sj_retry (retry_status, bucket_index); +CREATE INDEX idx_sj_retry_03 ON sj_retry (parent_id); +CREATE INDEX idx_sj_retry_04 ON sj_retry (create_dt); COMMENT ON COLUMN sj_retry.id IS '主键'; COMMENT ON COLUMN sj_retry.namespace_id IS '命名空间id'; COMMENT ON COLUMN sj_retry.group_name IS '组名称'; +COMMENT ON COLUMN sj_retry.group_id IS '组Id'; COMMENT ON COLUMN sj_retry.scene_name IS '场景名称'; +COMMENT ON COLUMN sj_retry.scene_id IS '场景ID'; COMMENT ON COLUMN sj_retry.idempotent_id IS '幂等id'; COMMENT ON COLUMN sj_retry.biz_no IS '业务编号'; COMMENT ON COLUMN sj_retry.executor_name IS '执行器名称'; @@ -392,7 +397,7 @@ COMMENT ON TABLE sj_server_node IS '服务器节点'; -- sj_distributed_lock CREATE TABLE sj_distributed_lock ( - name varchar2(64) NOT NULL, + name varchar2(64) NULL, lock_until timestamp(3) DEFAULT CURRENT_TIMESTAMP(3) NOT NULL, locked_at timestamp(3) DEFAULT CURRENT_TIMESTAMP(3) NOT NULL, locked_by varchar2(255) NULL, @@ -401,7 +406,7 @@ CREATE TABLE sj_distributed_lock ); ALTER TABLE sj_distributed_lock - ADD CONSTRAINT pk_sj_distributed_lock PRIMARY KEY (name); + ADD CONSTRAINT pk_sj_distributed_lock PRIMARY KEY (id); COMMENT ON COLUMN sj_distributed_lock.name IS '锁名称'; COMMENT ON COLUMN sj_distributed_lock.lock_until IS '锁定时长'; diff --git a/doc/sql/snail_job_postgre.sql b/doc/sql/snail_job_postgre.sql index ec22f0469..72c642157 100644 --- a/doc/sql/snail_job_postgre.sql +++ b/doc/sql/snail_job_postgre.sql @@ -2,7 +2,7 @@ SnailJob Database Transfer Tool Source Server Type : MySQL Target Server Type : PostgreSQL - Date: 2025-02-25 22:15:32 + Date: 2025-04-26 09:56:45 */ @@ -30,7 +30,7 @@ COMMENT ON COLUMN sj_namespace.update_dt IS '修改时间'; COMMENT ON TABLE sj_namespace IS '命名空间'; INSERT INTO sj_namespace (id, name, unique_id, create_dt, update_dt, deleted) -VALUES (0, 'Default', '764d604ec6fc45f68cd92514c40e9e1a', now(), now(), 0); +VALUES (1, 'Default', '764d604ec6fc45f68cd92514c40e9e1a', now(), now(), 0); -- sj_group_config CREATE TABLE sj_group_config @@ -133,7 +133,9 @@ CREATE TABLE sj_retry_dead_letter id bigserial PRIMARY KEY, namespace_id varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a', group_name varchar(64) NOT NULL, + group_id bigint NOT NULL, scene_name varchar(64) NOT NULL, + scene_id bigint NOT NULL, idempotent_id varchar(64) NOT NULL, biz_no varchar(64) NOT NULL DEFAULT '', executor_name varchar(512) NOT NULL DEFAULT '', @@ -150,7 +152,9 @@ CREATE INDEX idx_sj_retry_dead_letter_04 ON sj_retry_dead_letter (create_dt); COMMENT ON COLUMN sj_retry_dead_letter.id IS '主键'; COMMENT ON COLUMN sj_retry_dead_letter.namespace_id IS '命名空间id'; COMMENT ON COLUMN sj_retry_dead_letter.group_name IS '组名称'; +COMMENT ON COLUMN sj_retry_dead_letter.group_id IS '组Id'; COMMENT ON COLUMN sj_retry_dead_letter.scene_name IS '场景名称'; +COMMENT ON COLUMN sj_retry_dead_letter.scene_id IS '场景ID'; COMMENT ON COLUMN sj_retry_dead_letter.idempotent_id IS '幂等id'; COMMENT ON COLUMN sj_retry_dead_letter.biz_no IS '业务编号'; COMMENT ON COLUMN sj_retry_dead_letter.executor_name IS '执行器名称'; @@ -165,7 +169,9 @@ CREATE TABLE sj_retry id bigserial PRIMARY KEY, namespace_id varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a', group_name varchar(64) NOT NULL, + group_id bigint NOT NULL, scene_name varchar(64) NOT NULL, + scene_id bigint NOT NULL, idempotent_id varchar(64) NOT NULL, biz_no varchar(64) NOT NULL DEFAULT '', executor_name varchar(512) NOT NULL DEFAULT '', @@ -182,19 +188,19 @@ CREATE TABLE sj_retry update_dt timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ); -CREATE UNIQUE INDEX uk_sj_retry_01 ON sj_retry (namespace_id, group_name, task_type, idempotent_id, deleted); +CREATE UNIQUE INDEX uk_sj_retry_01 ON sj_retry (scene_id, task_type, idempotent_id, deleted); -CREATE INDEX idx_sj_retry_01 ON sj_retry (namespace_id, group_name, scene_name); -CREATE INDEX idx_sj_retry_02 ON sj_retry (namespace_id, group_name, retry_status); -CREATE INDEX idx_sj_retry_03 ON sj_retry (idempotent_id); -CREATE INDEX idx_sj_retry_04 ON sj_retry (biz_no); -CREATE INDEX idx_sj_retry_05 ON sj_retry (parent_id); -CREATE INDEX idx_sj_retry_06 ON sj_retry (create_dt); +CREATE INDEX idx_sj_retry_01 ON sj_retry (biz_no); +CREATE INDEX idx_sj_retry_02 ON sj_retry (retry_status, bucket_index); +CREATE INDEX idx_sj_retry_03 ON sj_retry (parent_id); +CREATE INDEX idx_sj_retry_04 ON sj_retry (create_dt); COMMENT ON COLUMN sj_retry.id IS '主键'; COMMENT ON COLUMN sj_retry.namespace_id IS '命名空间id'; COMMENT ON COLUMN sj_retry.group_name IS '组名称'; +COMMENT ON COLUMN sj_retry.group_id IS '组Id'; COMMENT ON COLUMN sj_retry.scene_name IS '场景名称'; +COMMENT ON COLUMN sj_retry.scene_id IS '场景ID'; COMMENT ON COLUMN sj_retry.idempotent_id IS '幂等id'; COMMENT ON COLUMN sj_retry.biz_no IS '业务编号'; COMMENT ON COLUMN sj_retry.executor_name IS '执行器名称'; diff --git a/doc/sql/snail_job_sqlserver.sql b/doc/sql/snail_job_sqlserver.sql index a3176f95c..42703a1c5 100644 --- a/doc/sql/snail_job_sqlserver.sql +++ b/doc/sql/snail_job_sqlserver.sql @@ -2,7 +2,7 @@ SnailJob Database Transfer Tool Source Server Type : MySQL Target Server Type : Microsoft SQL Server - Date: 2025-02-25 22:16:48 + Date: 2025-04-26 10:03:23 */ @@ -404,7 +404,9 @@ CREATE TABLE sj_retry_dead_letter id bigint NOT NULL PRIMARY KEY IDENTITY, namespace_id nvarchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a', group_name nvarchar(64) NOT NULL, + group_id bigint NOT NULL, scene_name nvarchar(64) NOT NULL, + scene_id bigint NOT NULL, idempotent_id nvarchar(64) NOT NULL, biz_no nvarchar(64) NOT NULL DEFAULT '', executor_name nvarchar(512) NOT NULL DEFAULT '', @@ -444,6 +446,13 @@ EXEC sp_addextendedproperty 'COLUMN', N'group_name' GO +EXEC sp_addextendedproperty + 'MS_Description', N'组Id', + 'SCHEMA', N'dbo', + 'TABLE', N'sj_retry_dead_letter', + 'COLUMN', N'group_id' +GO + EXEC sp_addextendedproperty 'MS_Description', N'场景名称', 'SCHEMA', N'dbo', @@ -451,6 +460,13 @@ EXEC sp_addextendedproperty 'COLUMN', N'scene_name' GO +EXEC sp_addextendedproperty + 'MS_Description', N'场景ID', + 'SCHEMA', N'dbo', + 'TABLE', N'sj_retry_dead_letter', + 'COLUMN', N'scene_id' +GO + EXEC sp_addextendedproperty 'MS_Description', N'幂等id', 'SCHEMA', N'dbo', @@ -505,7 +521,9 @@ CREATE TABLE sj_retry id bigint NOT NULL PRIMARY KEY IDENTITY, namespace_id nvarchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a', group_name nvarchar(64) NOT NULL, + group_id bigint NOT NULL, scene_name nvarchar(64) NOT NULL, + scene_id bigint NOT NULL, idempotent_id nvarchar(64) NOT NULL, biz_no nvarchar(64) NOT NULL DEFAULT '', executor_name nvarchar(512) NOT NULL DEFAULT '', @@ -523,20 +541,16 @@ CREATE TABLE sj_retry ) GO -CREATE UNIQUE INDEX uk_sj_retry_01 ON sj_retry (namespace_id, group_name, task_type, idempotent_id, deleted) +CREATE UNIQUE INDEX uk_sj_retry_01 ON sj_retry (scene_id, task_type, idempotent_id, deleted) GO -CREATE INDEX idx_sj_retry_01 ON sj_retry (namespace_id, group_name, scene_name) +CREATE INDEX idx_sj_retry_01 ON sj_retry (biz_no) GO -CREATE INDEX idx_sj_retry_02 ON sj_retry (namespace_id, group_name, retry_status) +CREATE INDEX idx_sj_retry_02 ON sj_retry (retry_status, bucket_index) GO -CREATE INDEX idx_sj_retry_03 ON sj_retry (idempotent_id) +CREATE INDEX idx_sj_retry_03 ON sj_retry (parent_id) GO -CREATE INDEX idx_sj_retry_04 ON sj_retry (biz_no) -GO -CREATE INDEX idx_sj_retry_05 ON sj_retry (parent_id) -GO -CREATE INDEX idx_sj_retry_06 ON sj_retry (create_dt) +CREATE INDEX idx_sj_retry_04 ON sj_retry (create_dt) GO EXEC sp_addextendedproperty @@ -560,6 +574,13 @@ EXEC sp_addextendedproperty 'COLUMN', N'group_name' GO +EXEC sp_addextendedproperty + 'MS_Description', N'组Id', + 'SCHEMA', N'dbo', + 'TABLE', N'sj_retry', + 'COLUMN', N'group_id' +GO + EXEC sp_addextendedproperty 'MS_Description', N'场景名称', 'SCHEMA', N'dbo', @@ -567,6 +588,13 @@ EXEC sp_addextendedproperty 'COLUMN', N'scene_name' GO +EXEC sp_addextendedproperty + 'MS_Description', N'场景ID', + 'SCHEMA', N'dbo', + 'TABLE', N'sj_retry', + 'COLUMN', N'scene_id' +GO + EXEC sp_addextendedproperty 'MS_Description', N'幂等id', 'SCHEMA', N'dbo', diff --git a/doc/tool/dbsync.py b/doc/tool/dbsync.py index d83b3cef9..204447e24 100755 --- a/doc/tool/dbsync.py +++ b/doc/tool/dbsync.py @@ -4,6 +4,10 @@ Author: dhb52 pip install simple-ddl-parser + +OR install uv and using with command: + +uv run --with simple-ddl-parser dbsync.py postgre """ import argparse