# sc-tool **Repository Path**: joeloon/sc-tool ## Basic Information - **Project Name**: sc-tool - **Description**: 适航开发平台( https://gitee.com/rivercity-hc/sc-platform-gitee )配套的小工具。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-31 - **Last Updated**: 2026-07-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # sc-tools 适航软件开发平台辅助工具集。 ## 项目简介 本仓库当前包含一个数据同步脚本,用于将 SQLite 数据库(`data/do178c.db`)的**表结构、数据、索引**全量同步到 PostgreSQL 数据库。适用于 DO-178C 适航软件合规数据向服务端数据库迁移的场景。 ## 目录结构 ``` sc-tools/ ├── scripts/ │ └── sync_sqlite_to_pg.py # SQLite -> PostgreSQL 全量同步脚本 ├── data/ │ └── do178c.db # 源 SQLite 数据库(运行前需自行放入) └── 提示词.md # 脚本需求来源 ``` ## 功能特性 `scripts/sync_sqlite_to_pg.py` 核心能力: - **全量同步**:表结构 + 数据 + 显式索引一次性迁移。 - **数据驱动类型推断**:SQLite 动态类型(如 `INTEGER` 列实际存 ISO 时间戳字符串)按列实际数据推断 PostgreSQL 类型。 - **约束保留**:保留 `CHECK` / `UNIQUE` / `PRIMARY KEY` / `FOREIGN KEY` / `DEFAULT` 等约束(列级与表级均保留)。 - **外键处理**:同步期间关闭 FK 校验(`session_replication_role = 'replica'`),容忍源库 FK 不一致数据;按外键依赖拓扑排序建表。 - **幂等执行**:每次运行先 `DROP TABLE ... CASCADE` 再重建,可重复运行。 - **DDL 适配**: - `AUTOINCREMENT` 列转为 `BIGSERIAL`,同步后自动 `setval` 校正序列。 - SQLite `json_extract(...)` 转为 PostgreSQL `jsonb ->> / #>>`。 - SQLite `COLLATE NOCASE` 自动剥离(PG 无此排序规则)。 - **事务安全**:单事务提交,失败自动回滚。 ## 环境依赖 - Python 3.8+ - PostgreSQL 目标库(默认 `192.168.82.81:5433/do178c`) - Python 依赖: ```bash pip install "psycopg[binary]" ``` ## 配置 脚本通过环境变量配置,未设置时使用内置默认值: | 环境变量 | 默认值 | 说明 | | -------------- | ------------------ | --------------- | | `SQLITE_PATH` | `data/do178c.db` | 源 SQLite 路径 | | `PG_HOST` | `192.168.82.81` | PG 主机 | | `PG_PORT` | `5433` | PG 端口 | | `PG_DB` | `do178c` | PG 数据库名 | | `PG_USER` | `postgres` | PG 用户名 | | `PG_PASSWORD` | `jingjia` | PG 密码 | ## 使用方法 1. 将源数据库放入 `data/do178c.db`。 2. 安装依赖(见上)。 3. 运行同步: ```bash python scripts/sync_sqlite_to_pg.py ``` 自定义连接参数示例: ```bash PG_HOST=10.0.0.1 PG_PORT=5432 PG_DB=mydb python scripts/sync_sqlite_to_pg.py ``` 成功输出示例: ``` [data] table_a: 123 rows ... ======================================================= 同步完成:表 N 张,数据 M 行,显式索引 K 个 ======================================================= ``` ## 类型映射规则 `infer_pg_type` 按列声明类型 + 实际数据推断: | SQLite 声明 | PostgreSQL 类型 | | ---------------------------- | -------------------- | | `INT`(全列 int-like) | `BIGINT` | | `INT`(含非整数字符串) | `TEXT`(动态类型兜底)| | `CHAR` / `CLOB` / `TEXT` | `TEXT` | | 空 / `BLOB` | `BYTEA` | | `REAL` / `FLOA` / `DOUB` | `DOUBLE PRECISION` | | `NUMERIC` / `DECIMAL` | `NUMERIC` | | `DATE` / `TIME` | `TIMESTAMP` | | `BOOL` | `BOOLEAN` | | 其它 | `TEXT` | ## 注意事项 - 同步会 **DROP 并重建**目标库中同名表,目标库同名数据将丢失,请确认环境。 - 同步期间临时关闭外键校验,源库外键不一致数据会被原样写入。 - 脚本当前面向全量同步,不支持增量/差量同步。 ## 许可证 内部使用,未指定开源许可证。