From cd7788de95f56fbd11909fefd5f48aa96f2208a8 Mon Sep 17 00:00:00 2001 From: dengqichen Date: Sat, 15 Nov 2025 17:29:39 +0800 Subject: [PATCH] init --- EXECUTOR_README.md | 313 +++++++++++ README.md | 27 +- converter.js | 5 +- db-mapping.json | 66 +++ dm-executor.js | 390 +++++++++++++ package-lock.json | 25 +- package.json | 8 +- scp_simulation_scenario.sql | 1026 ----------------------------------- 8 files changed, 828 insertions(+), 1032 deletions(-) create mode 100644 EXECUTOR_README.md create mode 100644 db-mapping.json create mode 100644 dm-executor.js delete mode 100644 scp_simulation_scenario.sql diff --git a/EXECUTOR_README.md b/EXECUTOR_README.md new file mode 100644 index 0000000..4a3c9da --- /dev/null +++ b/EXECUTOR_README.md @@ -0,0 +1,313 @@ +# 达梦数据库自动执行器使用指南 + +## ✅ 完整可行方案(零额外依赖) + +基于**disql命令行工具**,使用你本地已有的达梦数据库管理工具。 + +--- + +## 📋 前提条件检查 + +### 1. 达梦数据库管理工具已安装 +``` +✅ 已确认: D:\sortware\dm_manager +``` + +### 2. disql工具存在 +``` +✅ 工具路径: D:\sortware\dm_manager\bin\disql.exe +``` + +### 3. Node.js已安装 +```bash +node -v +# 应显示版本号,如 v20.19.5 +``` + +### 4. 配置文件已准备 +``` +✅ db-mapping.json - 数据库连接和schema映射 +``` + +--- + +## 🚀 立即使用 + +### 方式一:一键批量执行(推荐) + +**双击执行**: +``` +execute-all.bat +``` + +这会自动执行`output`目录下的所有`*_dm.sql`文件。 + +--- + +### 方式二:命令行执行 + +#### 执行所有SQL文件 +```bash +node dm-executor.js output/*_dm.sql +``` + +#### 执行单个文件 +```bash +node dm-executor.js output/themetis_data_dm.sql +``` + +#### 执行指定文件 +```bash +node dm-executor.js output/schema1_dm.sql output/schema2_dm.sql +``` + +--- + +## 📊 执行效果展示 + +``` +====================================================================== +🚀 达梦数据库批量执行器 +====================================================================== +📂 文件数: 14 +🌐 服务器: 219.142.42.183 +🔧 工具: D:\sortware\dm_manager\bin\disql.exe +====================================================================== + +[1/14] +====================================================================== +📂 执行: lyg_scp_dm.sql +📋 Schema: lyg_scp +🎯 端口: 5256 +====================================================================== +............................................................ +---------------------------------------------------------------------- +✅ lyg_scp_dm.sql 执行成功 +端口: 5256 | 耗时: 3.45秒 +---------------------------------------------------------------------- + +[2/14] +====================================================================== +📂 执行: themetis_scp_dm.sql +📋 Schema: themetis_scp +🎯 端口: 5256 +====================================================================== +............................................................ +---------------------------------------------------------------------- +✅ themetis_scp_dm.sql 执行成功 +端口: 5256 | 耗时: 12.32秒 +---------------------------------------------------------------------- + +... (继续执行其他文件) + +====================================================================== +📊 执行统计 +====================================================================== +总文件数: 14 +✅ 成功: 14 +❌ 失败: 0 +⏱ 总耗时: 45.67秒 + +按端口统计: + 端口 5256: 14个文件 (✅14 ❌0) + +📄 详细报告: ./output/execution_report_1731660123456.json +====================================================================== +``` + +--- + +## 🔧 工作原理 + +### 1. 自动检测schema +```javascript +// 从SQL内容中提取schema名称 +"themetis_data"."table_name" → schema = "themetis_data" +``` + +### 2. 自动路由端口 +```javascript +// 根据db-mapping.json配置选择端口 +schema "themetis_data" → port 5256 +schema "other_schema" → port 5266 +``` + +### 3. 使用disql执行 +```bash +disql SYSDBA/@1sdgCq456@219.142.42.183:5256 @schema_dm.sql +``` + +### 4. 收集统计信息 +- 成功/失败数量 +- 执行耗时 +- 错误信息 +- 生成JSON报告 + +--- + +## 📁 完整工作流 + +``` +┌─────────────────────┐ +│ 1. 转换SQL │ +│ node converter.js │ +└──────────┬──────────┘ + │ + ▼ +┌─────────────────────┐ +│ input/*.sql │ +│ (PostgreSQL) │ +└──────────┬──────────┘ + │ + ▼ +┌─────────────────────┐ +│ output/*_dm.sql │ +│ (达梦格式) │ +└──────────┬──────────┘ + │ + ▼ +┌─────────────────────┐ +│ 2. 执行SQL │ +│ node dm-executor.js │ +│ output/*_dm.sql │ +└──────────┬──────────┘ + │ + ▼ +┌─────────────────────┐ +│ 达梦数据库 │ +│ 219.142.42.183:5256│ +└─────────────────────┘ +``` + +--- + +## 🛠 配置文件说明 + +### db-mapping.json +```json +{ + "defaultConnection": { + "host": "219.142.42.183", + "user": "SYSDBA", + "password": "@1sdgCq456" + }, + "defaultPort": 5256, + "schemaMappings": { + "lyg_scp": { "port": 5256, "description": "连云港SCP" }, + "themetis_data": { "port": 5256, "description": "主数据" } + } +} +``` + +--- + +## ❓ 常见问题 + +### Q1: 找不到disql工具 +**A**: 检查路径是否正确 +```bash +dir D:\sortware\dm_manager\bin\disql.exe +``` + +如果路径不同,修改`dm-executor.js`第23行。 + +--- + +### Q2: 执行失败 +**A**: 查看详细报告 +```bash +# 报告文件在 +./output/execution_report_*.json +``` + +--- + +### Q3: 连接数据库失败 +**A**: 检查配置 +1. db-mapping.json中的密码是否正确 +2. 数据库是否可访问 +3. 端口是否正确 + +测试连接: +```bash +D:\sortware\dm_manager\bin\disql.exe SYSDBA/@1sdgCq456@219.142.42.183:5256 +``` + +--- + +### Q4: 某些SQL执行失败 +**A**: 检查SQL语法 +1. 查看报告中的错误信息 +2. 手动在DM Manager中测试SQL +3. 可能需要重新转换SQL + +--- + +### Q5: 执行速度慢 +**A**: 正常现象 +- 大文件需要更长时间 +- 可以单独执行小文件测试 +- disql是串行执行,比较稳定但不够快 + +--- + +## 📈 性能建议 + +### 1. 分批执行 +对于大量SQL文件,建议分批执行: +```bash +# 先执行小的schema +node dm-executor.js output/lyg_scp_dm.sql output/model_scp_dm.sql + +# 再执行大的schema +node dm-executor.js output/themetis_scp_dm.sql +``` + +### 2. 按端口分组 +如果有多个数据库端口,可以分别执行: +```bash +# 只执行5256端口的 +node dm-executor.js output/schema1_dm.sql output/schema2_dm.sql + +# 再执行5266端口的 +node dm-executor.js output/schema3_dm.sql +``` + +--- + +## 🎯 优势 + +1. **零额外依赖** - 只需Node.js和disql +2. **最稳定** - 使用官方工具 +3. **完全自动** - 一键执行所有SQL +4. **智能路由** - 自动识别schema并选择端口 +5. **详细报告** - JSON格式的执行报告 +6. **可重复执行** - 支持多次执行 + +--- + +## 📞 技术支持 + +遇到问题?检查: +1. Node.js版本 (node -v) +2. disql工具 (测试手动连接) +3. 配置文件 (db-mapping.json) +4. SQL文件 (output目录) +5. 网络连接 (ping 219.142.42.183) + +--- + +## 🎉 开始使用 + +```bash +# 1. 转换SQL +node converter.js + +# 2. 执行SQL +node dm-executor.js output/*_dm.sql + +# 或者直接双击 +execute-all.bat +``` + +**就这么简单!** 🚀 diff --git a/README.md b/README.md index 1fa1f0e..8267a7f 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,32 @@ -# PostgreSQL到达梦数据库SQL转换工具 +# PostgreSQL到达梦数据库迁移工具套件 +**完整的PostgreSQL到达梦数据库迁移解决方案**:自动转换SQL语法 + 自动执行到数据库 + +## 🎯 完整工作流 + +``` +PostgreSQL SQL → 转换工具 → 达梦SQL → 执行工具 → 达梦数据库 + (input/) converter.js (output/) dm-executor.js (自动完成) +``` + +## 📦 工具套件 + +### 1. SQL转换工具 (converter.js) 自动将PostgreSQL导出的SQL文件转换为达梦数据库(DM8)兼容的SQL语法。 +### 2. SQL执行工具 (dm-executor.js) 🆕 +**零额外依赖,基于disql命令行工具** +- ✅ 自动批量执行转换后的SQL +- ✅ 智能识别schema并路由到正确端口 +- ✅ 详细的执行统计和报告 +- ✅ 可重复执行,错误处理完善 + +**一键执行**: 双击 `execute-all.bat` 或运行 `node dm-executor.js output/*_dm.sql` + +详细文档: [EXECUTOR_README.md](./EXECUTOR_README.md) + +--- + ## 核心功能特性 本工具通过**12个转换步骤**,解决PostgreSQL到达梦迁移过程中的**所有常见语法兼容性问题**: diff --git a/converter.js b/converter.js index ddb3281..e73c9a4 100644 --- a/converter.js +++ b/converter.js @@ -306,8 +306,9 @@ class PG2DMConverter { removeAttachPartition(sql) { let converted = sql; - // 匹配 ALTER TABLE ... ATTACH PARTITION ... FOR VALUES ...; - const attachPattern = /ALTER\s+TABLE\s+"[^"]+"\."[^"]+"\s+ATTACH\s+PARTITION\s+"[^"]+"\."[^"]+"\s+FOR\s+VALUES[^;]*;/gi; + // 匹配 ALTER TABLE ... ATTACH PARTITION ... + // 支持多种格式:FOR VALUES ..., FOR VALUES IN (...), DEFAULT + const attachPattern = /ALTER\s+TABLE\s+"[^"]+"\."[^"]+"\s+ATTACH\s+PARTITION\s+"[^"]+"\."[^"]+"\s+(FOR\s+VALUES[^;]*|DEFAULT)\s*;/gi; const matches = sql.match(attachPattern); if (matches) { diff --git a/db-mapping.json b/db-mapping.json new file mode 100644 index 0000000..277e4cc --- /dev/null +++ b/db-mapping.json @@ -0,0 +1,66 @@ +{ + "defaultConnection": { + "host": "219.142.42.183", + "user": "SYSDBA", + "password": "@1sdgCq456" + }, + "defaultPort": 5256, + "schemaMappings": { + "lyg_scp": { + "port": 5256, + "description": "连云港SCP" + }, + "model_scp": { + "port": 5256, + "description": "模型SCP" + }, + "themetis_scp": { + "port": 5256, + "description": "Themetis SCP" + }, + "themetis_cp": { + "port": 5256, + "description": "Themetis CP" + }, + "themetis_demo": { + "port": 5256, + "description": "Themetis Demo" + }, + "themetis_engine": { + "port": 5256, + "description": "Themetis Engine" + }, + "themetis_etl": { + "port": 5256, + "description": "Themetis ETL" + }, + "themetis_kk": { + "port": 5256, + "description": "Themetis KK" + }, + "themetis_mrp": { + "port": 5256, + "description": "Themetis MRP" + }, + "themetis_phase": { + "port": 5256, + "description": "Themetis Phase" + }, + "themetis_scheduler": { + "port": 5256, + "description": "Themetis Scheduler" + }, + "themetis_test": { + "port": 5256, + "description": "Themetis Test" + }, + "themetis_user_data": { + "port": 5256, + "description": "Themetis User Data" + }, + "themetis_data": { + "port": 5256, + "description": "Themetis Data" + } + } +} diff --git a/dm-executor.js b/dm-executor.js new file mode 100644 index 0000000..52be197 --- /dev/null +++ b/dm-executor.js @@ -0,0 +1,390 @@ +/** + * 达梦数据库SQL自动执行器 + * 基于disql命令行工具,零额外依赖 + */ + +const fs = require('fs'); +const path = require('path'); +const { spawn } = require('child_process'); +const iconv = require('iconv-lite'); + +class DMExecutor { + constructor(configFile = './db-mapping.json') { + this.config = JSON.parse(fs.readFileSync(configFile, 'utf8')); + this.disqlPath = this.findDisql(); + this.stats = []; + } + + /** + * 查找disql工具路径 + */ + findDisql() { + const possiblePaths = [ + 'D:\\sortware\\dm_manager\\bin\\disql.exe', + 'D:\\dmdbms\\bin\\disql.exe', + 'C:\\dmdbms\\bin\\disql.exe', + 'disql' // PATH中 + ]; + + for (const p of possiblePaths) { + if (p === 'disql' || fs.existsSync(p)) { + return p; + } + } + + throw new Error('未找到disql工具,请确认达梦数据库已安装'); + } + + /** + * 检测SQL文件中的schema + */ + detectSchema(sqlContent) { + const match = sqlContent.match(/"([^"]+)"\./); + return match ? match[1] : null; + } + + /** + * 获取schema对应的端口 + */ + getPort(schema) { + if (!schema) return this.config.defaultPort; + const mapping = this.config.schemaMappings[schema]; + return mapping ? mapping.port : this.config.defaultPort; + } + + /** + * 使用disql执行SQL文件 + */ + async executeSQL(sqlFile) { + const sqlContent = fs.readFileSync(sqlFile, 'utf8'); + const schema = this.detectSchema(sqlContent); + const port = this.getPort(schema); + const { host, user, password } = this.config.defaultConnection; + + console.log(`\n${'='.repeat(70)}`); + console.log(`📂 执行: ${path.basename(sqlFile)}`); + console.log(`📋 Schema: ${schema || '(未检测到)'}`); + console.log(`🎯 端口: ${port}`); + console.log('='.repeat(70)); + + const startTime = Date.now(); + + return new Promise((resolve) => { + const absoluteSqlFile = path.resolve(sqlFile); + + console.log(`🔗 连接信息: ${user}@${host}:${port}`); + console.log(`📄 SQL文件: ${absoluteSqlFile}`); + console.log(`⏳ 执行中...`); + + // 使用交互式方式,通过stdin传递密码,避免命令行参数中@符号的解析问题 + const connectionString = `${user}@${host}:${port}`; + + console.log(`📝 连接参数: ${connectionString}`); + + // 启动disql,通过stdin传递密码和SQL命令 + const disql = spawn(this.disqlPath, [connectionString], { + shell: true, + stdio: ['pipe', 'pipe', 'pipe'] // 启用stdin以传递密码 + }); + + // 直接读取SQL文件内容并通过stdin执行 + // 避免@file.sql路径解析问题 + const sqlCommands = sqlContent; + + // 构建完整的命令序列 + const commands = `${password}\nSET TIMING ON;\nSET FEEDBACK ON;\n${sqlCommands}\nEXIT\n`; + + console.log(`📤 发送SQL内容: ${sqlCommands.split('\n').length} 行`); + console.log(`📋 SQL大小: ${(commands.length / 1024).toFixed(2)} KB`); + + // 写入命令到stdin + disql.stdin.write(commands, 'utf8', (err) => { + if (err) { + console.error('❌ 写入stdin失败:', err); + } + }); + disql.stdin.end(); + + let stdout = ''; + let stderr = ''; + let lastOutput = Date.now(); + + // 心跳检测 - 每秒显示一个点 + const heartbeat = setInterval(() => { + process.stdout.write('.'); + }, 1000); + + // 超时检测 - 5分钟无输出则认为超时 + const timeout = setTimeout(() => { + clearInterval(heartbeat); + disql.kill(); + console.log('\n❌ 超时:5分钟无响应'); + }, 300000); + + disql.stdout.on('data', (data) => { + // 将GBK编码转换为UTF-8 + const text = iconv.decode(data, 'gbk'); + stdout += text; + lastOutput = Date.now(); + + // 实时显示关键信息 + const keywords = ['执行成功', '执行失败', '行受影响', '影响行数', 'CREATE TABLE', 'CREATE INDEX', 'ALTER TABLE', '已用时间']; + if (keywords.some(keyword => text.includes(keyword))) { + // 显示包含关键字的行 + const lines = text.split('\n').filter(line => + keywords.some(keyword => line.includes(keyword)) + ); + lines.forEach(line => { + if (line.trim()) { + process.stdout.write(`\n ${line.trim().substring(0, 120)}`); + } + }); + } + }); + + disql.stderr.on('data', (data) => { + // 将GBK编码转换为UTF-8 + const text = iconv.decode(data, 'gbk'); + stderr += text; + // 显示错误(过滤掉正常的密码提示) + if (text.trim() && !text.includes('密码:')) { + process.stdout.write(`\n⚠ ${text.trim().substring(0, 150)}`); + } + }); + + disql.on('close', (code) => { + clearInterval(heartbeat); + clearTimeout(timeout); + + const duration = ((Date.now() - startTime) / 1000).toFixed(2); + console.log('\n'); + + const result = { + file: path.basename(sqlFile), + schema: schema, + port: port, + duration: duration, + success: code === 0, + exitCode: code, + output: stdout, + error: stderr + }; + + this.stats.push(result); + this.printResult(result); + resolve(result); + }); + + disql.on('error', (error) => { + clearInterval(heartbeat); + clearTimeout(timeout); + + const result = { + file: path.basename(sqlFile), + schema: schema, + port: port, + duration: 0, + success: false, + error: error.message + }; + this.stats.push(result); + resolve(result); + }); + }); + } + + /** + * 批量执行SQL文件 + */ + async executeBatch(sqlFiles) { + console.log('\n' + '='.repeat(70)); + console.log('🚀 达梦数据库批量执行器'); + console.log('='.repeat(70)); + console.log(`📂 文件数: ${sqlFiles.length}`); + console.log(`🌐 服务器: ${this.config.defaultConnection.host}`); + console.log(`🔧 工具: ${this.disqlPath}`); + console.log('='.repeat(70)); + + const overallStart = Date.now(); + + for (let i = 0; i < sqlFiles.length; i++) { + console.log(`\n[${i + 1}/${sqlFiles.length}]`); + await this.executeSQL(sqlFiles[i]); + } + + const overallDuration = ((Date.now() - overallStart) / 1000).toFixed(2); + this.printSummary(overallDuration); + } + + /** + * 打印单个文件执行结果 + */ + printResult(result) { + console.log('-'.repeat(70)); + if (result.success) { + console.log(`✅ ${result.file} 执行成功`); + } else { + console.log(`❌ ${result.file} 执行失败`); + if (result.error) { + console.log(`错误: ${result.error.substring(0, 200)}`); + } + } + console.log(`端口: ${result.port} | 耗时: ${result.duration}秒`); + console.log('-'.repeat(70)); + } + + /** + * 打印总体统计 + */ + printSummary(duration) { + console.log('\n' + '='.repeat(70)); + console.log('📊 执行统计'); + console.log('='.repeat(70)); + + const total = this.stats.length; + const success = this.stats.filter(s => s.success).length; + const failed = total - success; + + console.log(`总文件数: ${total}`); + console.log(`✅ 成功: ${success}`); + console.log(`❌ 失败: ${failed}`); + console.log(`⏱ 总耗时: ${duration}秒`); + + // 按端口分组 + const portStats = {}; + this.stats.forEach(s => { + if (!portStats[s.port]) { + portStats[s.port] = { total: 0, success: 0, failed: 0 }; + } + portStats[s.port].total++; + if (s.success) portStats[s.port].success++; + else portStats[s.port].failed++; + }); + + console.log('\n按端口统计:'); + Object.keys(portStats).sort().forEach(port => { + const stat = portStats[port]; + console.log(` 端口 ${port}: ${stat.total}个文件 (✅${stat.success} ❌${stat.failed})`); + }); + + // 显示失败的文件 + const failedFiles = this.stats.filter(s => !s.success); + if (failedFiles.length > 0) { + console.log('\n失败的文件:'); + failedFiles.forEach(f => { + console.log(` ❌ ${f.file} - ${f.error || '执行失败'}`); + }); + } + + // 保存报告 + this.saveReport(); + + console.log('='.repeat(70)); + } + + /** + * 保存执行报告 + */ + saveReport() { + const reportFile = path.join('./output', `execution_report_${Date.now()}.json`); + + const report = { + timestamp: new Date().toISOString(), + tool: 'disql', + server: this.config.defaultConnection.host, + summary: { + total: this.stats.length, + success: this.stats.filter(s => s.success).length, + failed: this.stats.filter(s => !s.success).length + }, + details: this.stats + }; + + fs.writeFileSync(reportFile, JSON.stringify(report, null, 2), 'utf8'); + console.log(`\n📄 详细报告: ${reportFile}`); + } +} + +/** + * 主函数 + */ +async function main() { + const args = process.argv.slice(2); + + if (args.length === 0) { + console.log(` +达梦数据库SQL执行器 +====================================== + +基于disql命令行工具,零额外依赖 + +使用方法: + node dm-executor.js + +示例: + # 执行单个文件 + node dm-executor.js output/schema_dm.sql + + # 批量执行 + node dm-executor.js output/*_dm.sql + + # 执行所有文件 + node dm-executor.js output/*.sql + +前提条件: + - 达梦数据库已安装 + - disql工具可用 + - db-mapping.json已配置 + +配置文件: + db-mapping.json - 数据库连接和schema映射配置 + `); + process.exit(0); + } + + // 解析SQL文件列表 + const sqlFiles = []; + args.forEach(arg => { + if (arg.includes('*')) { + // 通配符展开 + const dir = path.dirname(arg); + const pattern = path.basename(arg).replace(/\*/g, '.*'); + const regex = new RegExp(`^${pattern}$`); + + if (fs.existsSync(dir)) { + const files = fs.readdirSync(dir) + .filter(f => regex.test(f) && f.endsWith('.sql')) + .map(f => path.join(dir, f)); + sqlFiles.push(...files); + } + } else if (fs.existsSync(arg)) { + sqlFiles.push(arg); + } else { + console.error(`❌ 文件不存在: ${arg}`); + } + }); + + if (sqlFiles.length === 0) { + console.error('❌ 未找到SQL文件'); + process.exit(1); + } + + // 执行 + try { + const executor = new DMExecutor(); + await executor.executeBatch(sqlFiles); + + const failed = executor.stats.filter(s => !s.success).length; + process.exit(failed > 0 ? 1 : 0); + } catch (error) { + console.error('\n❌ 执行失败:', error.message); + console.error(error.stack); + process.exit(1); + } +} + +if (require.main === module) { + main(); +} + +module.exports = DMExecutor; diff --git a/package-lock.json b/package-lock.json index 0c265e4..4af6d20 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,8 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "chalk": "^4.1.2" + "chalk": "^4.1.2", + "iconv-lite": "^0.7.0" } }, "node_modules/ansi-styles": { @@ -70,6 +71,28 @@ "node": ">=8" } }, + "node_modules/iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", diff --git a/package.json b/package.json index a75e968..335d245 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,10 @@ "main": "converter.js", "scripts": { "start": "node converter.js", - "convert": "node converter.js" + "convert": "node converter.js", + "execute": "node dm-executor.js output/*_dm.sql", + "execute:single": "node dm-executor.js", + "all": "node converter.js && node dm-executor.js output/*_dm.sql" }, "keywords": [ "postgresql", @@ -17,6 +20,7 @@ "author": "", "license": "MIT", "dependencies": { - "chalk": "^4.1.2" + "chalk": "^4.1.2", + "iconv-lite": "^0.7.0" } } diff --git a/scp_simulation_scenario.sql b/scp_simulation_scenario.sql deleted file mode 100644 index 74b63ea..0000000 --- a/scp_simulation_scenario.sql +++ /dev/null @@ -1,1026 +0,0 @@ -/* - Navicat Premium Data Transfer - - Source Server : 61.144.183.57 - Source Server Type : PostgreSQL - Source Server Version : 160003 - Source Host : 61.144.183.57:15432 - Source Catalog : themetis_app - Source Schema : themetis_scp - - Target Server Type : PostgreSQL - Target Server Version : 160003 - File Encoding : 65001 - - Date: 15/11/2025 13:08:16 -*/ - - --- ---------------------------- --- Table structure for scp_simulation_scenario --- ---------------------------- -DROP TABLE IF EXISTS "themetis_scp"."scp_simulation_scenario"; -CREATE TABLE "themetis_scp"."scp_simulation_scenario" ( - "id" "pg_catalog"."int8" NOT NULL DEFAULT nextval('"themetis_scp".scp_simulation_scenario_id_seq'::regclass), - "sim_scenario_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "sim_scenario_name" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "bl_workflow_id" "pg_catalog"."int8" NOT NULL, - "bl_instance_id" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "bl_run_batch_id" "pg_catalog"."int8" NOT NULL, - "bl_period_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "sim_workflow_id" "pg_catalog"."int8" NOT NULL, - "sim_instance_id" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "current_sim_period_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "delete_flag" "pg_catalog"."bool" NOT NULL DEFAULT false, - "meta_attr01" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr02" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr03" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr04" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr05" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr06" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr07" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr08" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr09" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr10" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "creation_date" "pg_catalog"."timestamp", - "last_update_date" "pg_catalog"."timestamp", - "created_by" "pg_catalog"."int4", - "last_updated_by" "pg_catalog"."int4", - "tenant_id" "pg_catalog"."int8" NOT NULL DEFAULT '-1'::integer, - "meta_attr11" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr12" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr13" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr14" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr15" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr16" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr17" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr18" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr19" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr20" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr26" "pg_catalog"."numeric", - "meta_attr27" "pg_catalog"."numeric", - "meta_attr28" "pg_catalog"."numeric", - "meta_attr29" "pg_catalog"."numeric", - "meta_attr30" "pg_catalog"."numeric", - "meta_attr31" "pg_catalog"."timestamp", - "meta_attr32" "pg_catalog"."timestamp", - "meta_attr33" "pg_catalog"."timestamp", - "meta_attr34" "pg_catalog"."timestamp", - "meta_attr35" "pg_catalog"."timestamp", - "meta_attr36" "pg_catalog"."numeric", - "meta_attr37" "pg_catalog"."numeric", - "meta_attr38" "pg_catalog"."numeric", - "meta_attr39" "pg_catalog"."numeric", - "meta_attr40" "pg_catalog"."numeric", - "meta_attr21" "pg_catalog"."timestamp", - "meta_attr22" "pg_catalog"."timestamp", - "meta_attr23" "pg_catalog"."timestamp", - "meta_attr24" "pg_catalog"."timestamp", - "meta_attr25" "pg_catalog"."timestamp", - "lock_version" "pg_catalog"."int2" NOT NULL DEFAULT 0 -) -; -COMMENT ON COLUMN "themetis_scp"."scp_simulation_scenario"."sim_scenario_code" IS '模拟场景代码'; -COMMENT ON COLUMN "themetis_scp"."scp_simulation_scenario"."sim_scenario_name" IS '模拟场景名称'; -COMMENT ON COLUMN "themetis_scp"."scp_simulation_scenario"."bl_workflow_id" IS '基线工作流ID'; -COMMENT ON COLUMN "themetis_scp"."scp_simulation_scenario"."bl_instance_id" IS '基线引擎实例ID'; -COMMENT ON COLUMN "themetis_scp"."scp_simulation_scenario"."bl_run_batch_id" IS '基线运行批次ID'; -COMMENT ON COLUMN "themetis_scp"."scp_simulation_scenario"."bl_period_code" IS '基线期次代码'; -COMMENT ON COLUMN "themetis_scp"."scp_simulation_scenario"."sim_workflow_id" IS '模拟工作流ID'; -COMMENT ON COLUMN "themetis_scp"."scp_simulation_scenario"."sim_instance_id" IS '模拟引擎实例ID'; -COMMENT ON COLUMN "themetis_scp"."scp_simulation_scenario"."current_sim_period_code" IS '当前期次代码'; -COMMENT ON TABLE "themetis_scp"."scp_simulation_scenario" IS '模拟场景'; - --- ---------------------------- --- Table structure for scp_sop_bucket_data --- ---------------------------- -DROP TABLE IF EXISTS "themetis_scp"."scp_sop_bucket_data"; -CREATE TABLE "themetis_scp"."scp_sop_bucket_data" ( - "id" "pg_catalog"."int8" NOT NULL DEFAULT nextval('"themetis_scp".scp_sop_bucket_data_id_seq'::regclass), - "workbench_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "planning_item_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "planning_period_type_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "planning_period_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "demand_unit_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "supply_unit_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "supply_center_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "attribute_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "planner_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "figure_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "product_hierarchy_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "product_category_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "product_hierarchy_path" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "approval_instance_id" "pg_catalog"."int8", - "source_workbench_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "source_figure_group_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "source_figure_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "source_period_type_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "source_period_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "aggregated_type" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "customer_no" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "contract_no" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "project_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "supplier_no" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "production_delivery_method" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "bk_qty_001" "pg_catalog"."numeric", - "bk_qty_002" "pg_catalog"."numeric", - "bk_qty_003" "pg_catalog"."numeric", - "bk_qty_004" "pg_catalog"."numeric", - "bk_qty_005" "pg_catalog"."numeric", - "bk_qty_006" "pg_catalog"."numeric", - "bk_qty_007" "pg_catalog"."numeric", - "bk_qty_008" "pg_catalog"."numeric", - "bk_qty_009" "pg_catalog"."numeric", - "bk_qty_010" "pg_catalog"."numeric", - "bk_qty_011" "pg_catalog"."numeric", - "bk_qty_012" "pg_catalog"."numeric", - "bk_qty_013" "pg_catalog"."numeric", - "bk_qty_014" "pg_catalog"."numeric", - "bk_qty_015" "pg_catalog"."numeric", - "bk_qty_016" "pg_catalog"."numeric", - "bk_qty_017" "pg_catalog"."numeric", - "bk_qty_018" "pg_catalog"."numeric", - "bk_qty_019" "pg_catalog"."numeric", - "bk_qty_020" "pg_catalog"."numeric", - "bk_qty_021" "pg_catalog"."numeric", - "bk_qty_022" "pg_catalog"."numeric", - "bk_qty_023" "pg_catalog"."numeric", - "bk_qty_024" "pg_catalog"."numeric", - "bk_qty_025" "pg_catalog"."numeric", - "bk_qty_026" "pg_catalog"."numeric", - "bk_qty_027" "pg_catalog"."numeric", - "bk_qty_028" "pg_catalog"."numeric", - "bk_qty_029" "pg_catalog"."numeric", - "bk_qty_030" "pg_catalog"."numeric", - "bk_qty_031" "pg_catalog"."numeric", - "bk_qty_032" "pg_catalog"."numeric", - "bk_qty_033" "pg_catalog"."numeric", - "bk_qty_034" "pg_catalog"."numeric", - "bk_qty_035" "pg_catalog"."numeric", - "bk_qty_036" "pg_catalog"."numeric", - "bk_qty_037" "pg_catalog"."numeric", - "bk_qty_038" "pg_catalog"."numeric", - "bk_qty_039" "pg_catalog"."numeric", - "bk_qty_040" "pg_catalog"."numeric", - "bk_qty_041" "pg_catalog"."numeric", - "bk_qty_042" "pg_catalog"."numeric", - "bk_qty_043" "pg_catalog"."numeric", - "bk_qty_044" "pg_catalog"."numeric", - "bk_qty_045" "pg_catalog"."numeric", - "bk_qty_046" "pg_catalog"."numeric", - "bk_qty_047" "pg_catalog"."numeric", - "bk_qty_048" "pg_catalog"."numeric", - "bk_qty_049" "pg_catalog"."numeric", - "bk_qty_050" "pg_catalog"."numeric", - "bk_qty_051" "pg_catalog"."numeric", - "bk_qty_052" "pg_catalog"."numeric", - "bk_qty_053" "pg_catalog"."numeric", - "bk_qty_054" "pg_catalog"."numeric", - "bk_qty_055" "pg_catalog"."numeric", - "bk_qty_056" "pg_catalog"."numeric", - "bk_qty_057" "pg_catalog"."numeric", - "bk_qty_058" "pg_catalog"."numeric", - "bk_qty_059" "pg_catalog"."numeric", - "bk_qty_060" "pg_catalog"."numeric", - "bk_qty_061" "pg_catalog"."numeric", - "bk_qty_062" "pg_catalog"."numeric", - "bk_qty_063" "pg_catalog"."numeric", - "bk_qty_064" "pg_catalog"."numeric", - "bk_qty_065" "pg_catalog"."numeric", - "bk_qty_066" "pg_catalog"."numeric", - "bk_qty_067" "pg_catalog"."numeric", - "bk_qty_068" "pg_catalog"."numeric", - "bk_qty_069" "pg_catalog"."numeric", - "bk_qty_070" "pg_catalog"."numeric", - "bk_qty_071" "pg_catalog"."numeric", - "bk_qty_072" "pg_catalog"."numeric", - "bk_qty_073" "pg_catalog"."numeric", - "bk_qty_074" "pg_catalog"."numeric", - "bk_qty_075" "pg_catalog"."numeric", - "bk_qty_076" "pg_catalog"."numeric", - "bk_qty_077" "pg_catalog"."numeric", - "bk_qty_078" "pg_catalog"."numeric", - "bk_qty_079" "pg_catalog"."numeric", - "bk_qty_080" "pg_catalog"."numeric", - "bk_qty_081" "pg_catalog"."numeric", - "bk_qty_082" "pg_catalog"."numeric", - "bk_qty_083" "pg_catalog"."numeric", - "bk_qty_084" "pg_catalog"."numeric", - "bk_qty_085" "pg_catalog"."numeric", - "bk_qty_086" "pg_catalog"."numeric", - "bk_qty_087" "pg_catalog"."numeric", - "bk_qty_088" "pg_catalog"."numeric", - "bk_qty_089" "pg_catalog"."numeric", - "bk_qty_090" "pg_catalog"."numeric", - "bk_qty_091" "pg_catalog"."numeric", - "bk_qty_092" "pg_catalog"."numeric", - "bk_qty_093" "pg_catalog"."numeric", - "bk_qty_094" "pg_catalog"."numeric", - "bk_qty_095" "pg_catalog"."numeric", - "bk_qty_096" "pg_catalog"."numeric", - "bk_qty_097" "pg_catalog"."numeric", - "bk_qty_098" "pg_catalog"."numeric", - "bk_qty_099" "pg_catalog"."numeric", - "bk_qty_100" "pg_catalog"."numeric", - "bk_qty_101" "pg_catalog"."numeric", - "bk_qty_102" "pg_catalog"."numeric", - "bk_qty_103" "pg_catalog"."numeric", - "bk_qty_104" "pg_catalog"."numeric", - "sum_qty_01" "pg_catalog"."numeric", - "sum_qty_02" "pg_catalog"."numeric", - "sum_qty_03" "pg_catalog"."numeric", - "sum_qty_04" "pg_catalog"."numeric", - "sum_qty_05" "pg_catalog"."numeric", - "sum_qty_06" "pg_catalog"."numeric", - "sum_qty_07" "pg_catalog"."numeric", - "sum_qty_08" "pg_catalog"."numeric", - "sum_qty_09" "pg_catalog"."numeric", - "sum_qty_10" "pg_catalog"."numeric", - "sum_qty_11" "pg_catalog"."numeric", - "sum_qty_12" "pg_catalog"."numeric", - "sum_qty_13" "pg_catalog"."numeric", - "sum_qty_14" "pg_catalog"."numeric", - "sum_qty_15" "pg_catalog"."numeric", - "sum_qty_16" "pg_catalog"."numeric", - "sum_qty_17" "pg_catalog"."numeric", - "sum_qty_18" "pg_catalog"."numeric", - "sum_qty_19" "pg_catalog"."numeric", - "sum_qty_20" "pg_catalog"."numeric", - "creation_date" "pg_catalog"."timestamp", - "last_update_date" "pg_catalog"."timestamp", - "created_by" "pg_catalog"."int4", - "last_updated_by" "pg_catalog"."int4", - "tenant_id" "pg_catalog"."int8" NOT NULL DEFAULT '-1'::integer, - "head_id" "pg_catalog"."int8", - "lock_version" "pg_catalog"."int2" NOT NULL DEFAULT 0 -) -; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."workbench_code" IS '工作台代码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."planning_item_code" IS '计划对象编码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."planning_period_type_code" IS '期次类型码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."planning_period_code" IS '期次码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."demand_unit_code" IS '需求计划单元'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."supply_unit_code" IS '供应计划单元'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."attribute_code" IS '属性码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."planner_code" IS '计划员代码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."figure_code" IS '数据维度码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."product_hierarchy_code" IS '产品树编码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."product_category_code" IS '产品编码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."product_hierarchy_path" IS '产品树路径'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."approval_instance_id" IS '审批实例ID,editable_flag=TRUE的figure_code才需要审批流实例'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."source_workbench_code" IS '来源工作台代码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."source_figure_group_code" IS '来源维度组'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."source_figure_code" IS '来源数据维度码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."source_period_type_code" IS '来源期次类型码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."source_period_code" IS '来源期次码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."aggregated_type" IS 'NONE;MATERIAL_GROUP;PRODUCT_CATEGORY;SUPPLY_UNIT'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."customer_no" IS '客户代码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."contract_no" IS '合同号'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."project_code" IS '项目编码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."supplier_no" IS '供应商号'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."production_delivery_method" IS '生产交付模式:ETO,MTO,MTS'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_001" IS 'bucket数量1'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_002" IS 'bucket数量2'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_003" IS 'bucket数量3'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_004" IS 'bucket数量4'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_005" IS 'bucket数量5'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_006" IS 'bucket数量6'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_007" IS 'bucket数量7'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_008" IS 'bucket数量8'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_009" IS 'bucket数量9'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_010" IS 'bucket数量10'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_011" IS 'bucket数量11'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_012" IS 'bucket数量12'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_013" IS 'bucket数量13'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_014" IS 'bucket数量14'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_015" IS 'bucket数量15'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_016" IS 'bucket数量16'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_017" IS 'bucket数量17'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_018" IS 'bucket数量18'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_019" IS 'bucket数量19'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_020" IS 'bucket数量20'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_021" IS 'bucket数量21'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_022" IS 'bucket数量22'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_023" IS 'bucket数量23'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_024" IS 'bucket数量24'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_025" IS 'bucket数量25'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_026" IS 'bucket数量26'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_027" IS 'bucket数量27'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_028" IS 'bucket数量28'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_029" IS 'bucket数量29'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_030" IS 'bucket数量30'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_031" IS 'bucket数量31'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_032" IS 'bucket数量32'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_033" IS 'bucket数量33'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_034" IS 'bucket数量34'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_035" IS 'bucket数量35'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_036" IS 'bucket数量36'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_037" IS 'bucket数量37'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_038" IS 'bucket数量38'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_039" IS 'bucket数量39'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_040" IS 'bucket数量40'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_041" IS 'bucket数量41'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_042" IS 'bucket数量42'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_043" IS 'bucket数量43'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_044" IS 'bucket数量44'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_045" IS 'bucket数量45'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_046" IS 'bucket数量46'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_047" IS 'bucket数量47'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_048" IS 'bucket数量48'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_049" IS 'bucket数量49'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_050" IS 'bucket数量50'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_051" IS 'bucket数量51'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_052" IS 'bucket数量52'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_053" IS 'bucket数量53'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_054" IS 'bucket数量54'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_055" IS 'bucket数量55'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_056" IS 'bucket数量56'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_057" IS 'bucket数量57'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_058" IS 'bucket数量58'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_059" IS 'bucket数量59'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_060" IS 'bucket数量60'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_061" IS 'bucket数量61'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_062" IS 'bucket数量62'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_063" IS 'bucket数量63'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_064" IS 'bucket数量64'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_065" IS 'bucket数量65'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_066" IS 'bucket数量66'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_067" IS 'bucket数量67'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_068" IS 'bucket数量68'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_069" IS 'bucket数量69'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_070" IS 'bucket数量70'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_071" IS 'bucket数量71'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_072" IS 'bucket数量72'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_073" IS 'bucket数量73'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_074" IS 'bucket数量74'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_075" IS 'bucket数量75'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_076" IS 'bucket数量76'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_077" IS 'bucket数量77'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_078" IS 'bucket数量78'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_079" IS 'bucket数量79'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_080" IS 'bucket数量80'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_081" IS 'bucket数量81'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_082" IS 'bucket数量82'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_083" IS 'bucket数量83'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_084" IS 'bucket数量84'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_085" IS 'bucket数量85'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_086" IS 'bucket数量86'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_087" IS 'bucket数量87'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_088" IS 'bucket数量88'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_089" IS 'bucket数量89'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_090" IS 'bucket数量90'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_091" IS 'bucket数量91'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_092" IS 'bucket数量92'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_093" IS 'bucket数量93'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_094" IS 'bucket数量94'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_095" IS 'bucket数量95'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_096" IS 'bucket数量96'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_097" IS 'bucket数量97'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_098" IS 'bucket数量98'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_099" IS 'bucket数量99'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_100" IS 'bucket数量100'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_101" IS 'bucket数量101'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_102" IS 'bucket数量102'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_103" IS 'bucket数量103'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."bk_qty_104" IS 'bucket数量104'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."sum_qty_01" IS '汇总数量1'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."sum_qty_02" IS '汇总数量2'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."sum_qty_03" IS '汇总数量3'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."sum_qty_04" IS '汇总数量4'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."sum_qty_05" IS '汇总数量5'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."sum_qty_06" IS '汇总数量6'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."sum_qty_07" IS '汇总数量7'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."sum_qty_08" IS '汇总数量8'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."sum_qty_09" IS '汇总数量9'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."sum_qty_10" IS '汇总数量10'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."sum_qty_11" IS '汇总数量11'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."sum_qty_12" IS '汇总数量12'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."sum_qty_13" IS '汇总数量13'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."sum_qty_14" IS '汇总数量14'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."sum_qty_15" IS '汇总数量15'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."sum_qty_16" IS '汇总数量16'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."sum_qty_17" IS '汇总数量17'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."sum_qty_18" IS '汇总数量18'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."sum_qty_19" IS '汇总数量19'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."sum_qty_20" IS '汇总数量20'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_bucket_data"."tenant_id" IS '租户ID'; -COMMENT ON TABLE "themetis_scp"."scp_sop_bucket_data" IS 'DP需求预测bucket数据'; - --- ---------------------------- --- Table structure for scp_sop_planning_item --- ---------------------------- -DROP TABLE IF EXISTS "themetis_scp"."scp_sop_planning_item"; -CREATE TABLE "themetis_scp"."scp_sop_planning_item" ( - "id" "pg_catalog"."int8" NOT NULL DEFAULT nextval('"themetis_scp".scp_sop_planning_item_id_seq'::regclass), - "workbench_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "planning_period_type_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "planning_period_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "demand_unit_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "supply_unit_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "supply_center_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "planning_item_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "planner_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "status" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "product_hierarchy_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "product_category_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "product_hierarchy_path" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "customer_no" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "contract_no" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "order_no" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "project_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "supplier_no" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "production_delivery_method" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "attribute_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "aggregated_type" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr01" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr02" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr03" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr04" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr05" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr06" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr07" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr08" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr09" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr10" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr11" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr12" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr13" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr14" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr15" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr16" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr17" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr18" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr19" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr20" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr21" "pg_catalog"."timestamp", - "meta_attr22" "pg_catalog"."timestamp", - "meta_attr23" "pg_catalog"."timestamp", - "meta_attr24" "pg_catalog"."timestamp", - "meta_attr25" "pg_catalog"."timestamp", - "meta_attr26" "pg_catalog"."numeric", - "meta_attr27" "pg_catalog"."numeric", - "meta_attr28" "pg_catalog"."numeric", - "meta_attr29" "pg_catalog"."numeric", - "meta_attr30" "pg_catalog"."numeric", - "creation_date" "pg_catalog"."timestamp", - "last_update_date" "pg_catalog"."timestamp", - "created_by" "pg_catalog"."int4", - "last_updated_by" "pg_catalog"."int4", - "tenant_id" "pg_catalog"."int8" NOT NULL, - "submitter_id" "pg_catalog"."int4", - "approver_id" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "meta_attr31" "pg_catalog"."timestamp", - "meta_attr32" "pg_catalog"."timestamp", - "meta_attr33" "pg_catalog"."timestamp", - "meta_attr34" "pg_catalog"."timestamp", - "meta_attr35" "pg_catalog"."timestamp", - "meta_attr36" "pg_catalog"."numeric", - "meta_attr37" "pg_catalog"."numeric", - "meta_attr38" "pg_catalog"."numeric", - "meta_attr39" "pg_catalog"."numeric", - "meta_attr40" "pg_catalog"."numeric", - "lock_version" "pg_catalog"."int2" NOT NULL DEFAULT 0 -) -; -COMMENT ON COLUMN "themetis_scp"."scp_sop_planning_item"."workbench_code" IS '工作台代码,外键'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_planning_item"."planning_period_type_code" IS '期次类型码,外键'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_planning_item"."planning_period_code" IS '期次码,外键'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_planning_item"."demand_unit_code" IS '需求计划单元'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_planning_item"."supply_unit_code" IS '供应计划单元'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_planning_item"."planning_item_code" IS '计划对象编码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_planning_item"."planner_code" IS '计划员代码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_planning_item"."status" IS '状态:Draft,In Approval Process,Published,Reject'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_planning_item"."product_hierarchy_code" IS '产品树编码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_planning_item"."product_category_code" IS '产品编码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_planning_item"."product_hierarchy_path" IS '产品树路径'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_planning_item"."customer_no" IS '客户代码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_planning_item"."contract_no" IS '合同号'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_planning_item"."order_no" IS '订单号,针对订单拆分为需求计划场景'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_planning_item"."project_code" IS '项目编码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_planning_item"."supplier_no" IS '供应商号'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_planning_item"."production_delivery_method" IS '生产交付模式:ETO,MTO,MTS'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_planning_item"."attribute_code" IS '属性码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_planning_item"."aggregated_type" IS 'NONE;MATERIAL_GROUP;PRODUCT_CATEGORY;SUPPLY_UNIT'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_planning_item"."submitter_id" IS '提交人ID'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_planning_item"."approver_id" IS '审批人账号ID(当前审批人)'; -COMMENT ON TABLE "themetis_scp"."scp_sop_planning_item" IS 'DP需求预测计划对象数据'; - --- ---------------------------- --- Table structure for scp_sop_waterfall_bucket_data --- ---------------------------- -DROP TABLE IF EXISTS "themetis_scp"."scp_sop_waterfall_bucket_data"; -CREATE TABLE "themetis_scp"."scp_sop_waterfall_bucket_data" ( - "id" "pg_catalog"."int8" NOT NULL DEFAULT nextval('"themetis_scp".scp_sop_waterfall_bucket_data_id_seq'::regclass), - "workbench_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "planning_item_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "planning_period_type_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "planning_period_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "demand_unit_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "supply_unit_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "attribute_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "planner_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "figure_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "compare_planning_period_type_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "compare_planning_period_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default" NOT NULL, - "product_hierarchy_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "product_category_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "product_hierarchy_path" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "config_part_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "approval_instance_id" "pg_catalog"."int8", - "source_workbench_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "source_figure_group_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "source_figure_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "source_period_type_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "source_period_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "aggregated_type" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "customer_no" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "contract_no" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "project_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "supplier_no" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "production_delivery_method" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "bk_qty_001" "pg_catalog"."numeric", - "bk_qty_002" "pg_catalog"."numeric", - "bk_qty_003" "pg_catalog"."numeric", - "bk_qty_004" "pg_catalog"."numeric", - "bk_qty_005" "pg_catalog"."numeric", - "bk_qty_006" "pg_catalog"."numeric", - "bk_qty_007" "pg_catalog"."numeric", - "bk_qty_008" "pg_catalog"."numeric", - "bk_qty_009" "pg_catalog"."numeric", - "bk_qty_010" "pg_catalog"."numeric", - "bk_qty_011" "pg_catalog"."numeric", - "bk_qty_012" "pg_catalog"."numeric", - "bk_qty_013" "pg_catalog"."numeric", - "bk_qty_014" "pg_catalog"."numeric", - "bk_qty_015" "pg_catalog"."numeric", - "bk_qty_016" "pg_catalog"."numeric", - "bk_qty_017" "pg_catalog"."numeric", - "bk_qty_018" "pg_catalog"."numeric", - "bk_qty_019" "pg_catalog"."numeric", - "bk_qty_020" "pg_catalog"."numeric", - "bk_qty_021" "pg_catalog"."numeric", - "bk_qty_022" "pg_catalog"."numeric", - "bk_qty_023" "pg_catalog"."numeric", - "bk_qty_024" "pg_catalog"."numeric", - "bk_qty_025" "pg_catalog"."numeric", - "bk_qty_026" "pg_catalog"."numeric", - "bk_qty_027" "pg_catalog"."numeric", - "bk_qty_028" "pg_catalog"."numeric", - "bk_qty_029" "pg_catalog"."numeric", - "bk_qty_030" "pg_catalog"."numeric", - "bk_qty_031" "pg_catalog"."numeric", - "bk_qty_032" "pg_catalog"."numeric", - "bk_qty_033" "pg_catalog"."numeric", - "bk_qty_034" "pg_catalog"."numeric", - "bk_qty_035" "pg_catalog"."numeric", - "bk_qty_036" "pg_catalog"."numeric", - "bk_qty_037" "pg_catalog"."numeric", - "bk_qty_038" "pg_catalog"."numeric", - "bk_qty_039" "pg_catalog"."numeric", - "bk_qty_040" "pg_catalog"."numeric", - "bk_qty_041" "pg_catalog"."numeric", - "bk_qty_042" "pg_catalog"."numeric", - "bk_qty_043" "pg_catalog"."numeric", - "bk_qty_044" "pg_catalog"."numeric", - "bk_qty_045" "pg_catalog"."numeric", - "bk_qty_046" "pg_catalog"."numeric", - "bk_qty_047" "pg_catalog"."numeric", - "bk_qty_048" "pg_catalog"."numeric", - "bk_qty_049" "pg_catalog"."numeric", - "bk_qty_050" "pg_catalog"."numeric", - "bk_qty_051" "pg_catalog"."numeric", - "bk_qty_052" "pg_catalog"."numeric", - "bk_qty_053" "pg_catalog"."numeric", - "bk_qty_054" "pg_catalog"."numeric", - "bk_qty_055" "pg_catalog"."numeric", - "bk_qty_056" "pg_catalog"."numeric", - "bk_qty_057" "pg_catalog"."numeric", - "bk_qty_058" "pg_catalog"."numeric", - "bk_qty_059" "pg_catalog"."numeric", - "bk_qty_060" "pg_catalog"."numeric", - "bk_qty_061" "pg_catalog"."numeric", - "bk_qty_062" "pg_catalog"."numeric", - "bk_qty_063" "pg_catalog"."numeric", - "bk_qty_064" "pg_catalog"."numeric", - "bk_qty_065" "pg_catalog"."numeric", - "bk_qty_066" "pg_catalog"."numeric", - "bk_qty_067" "pg_catalog"."numeric", - "bk_qty_068" "pg_catalog"."numeric", - "bk_qty_069" "pg_catalog"."numeric", - "bk_qty_070" "pg_catalog"."numeric", - "bk_qty_071" "pg_catalog"."numeric", - "bk_qty_072" "pg_catalog"."numeric", - "bk_qty_073" "pg_catalog"."numeric", - "bk_qty_074" "pg_catalog"."numeric", - "bk_qty_075" "pg_catalog"."numeric", - "bk_qty_076" "pg_catalog"."numeric", - "bk_qty_077" "pg_catalog"."numeric", - "bk_qty_078" "pg_catalog"."numeric", - "bk_qty_079" "pg_catalog"."numeric", - "bk_qty_080" "pg_catalog"."numeric", - "bk_qty_081" "pg_catalog"."numeric", - "bk_qty_082" "pg_catalog"."numeric", - "bk_qty_083" "pg_catalog"."numeric", - "bk_qty_084" "pg_catalog"."numeric", - "bk_qty_085" "pg_catalog"."numeric", - "bk_qty_086" "pg_catalog"."numeric", - "bk_qty_087" "pg_catalog"."numeric", - "bk_qty_088" "pg_catalog"."numeric", - "bk_qty_089" "pg_catalog"."numeric", - "bk_qty_090" "pg_catalog"."numeric", - "bk_qty_091" "pg_catalog"."numeric", - "bk_qty_092" "pg_catalog"."numeric", - "bk_qty_093" "pg_catalog"."numeric", - "bk_qty_094" "pg_catalog"."numeric", - "bk_qty_095" "pg_catalog"."numeric", - "bk_qty_096" "pg_catalog"."numeric", - "bk_qty_097" "pg_catalog"."numeric", - "bk_qty_098" "pg_catalog"."numeric", - "bk_qty_099" "pg_catalog"."numeric", - "bk_qty_100" "pg_catalog"."numeric", - "bk_qty_101" "pg_catalog"."numeric", - "bk_qty_102" "pg_catalog"."numeric", - "bk_qty_103" "pg_catalog"."numeric", - "bk_qty_104" "pg_catalog"."numeric", - "sum_qty_01" "pg_catalog"."numeric", - "sum_qty_02" "pg_catalog"."numeric", - "sum_qty_03" "pg_catalog"."numeric", - "sum_qty_04" "pg_catalog"."numeric", - "sum_qty_05" "pg_catalog"."numeric", - "sum_qty_06" "pg_catalog"."numeric", - "sum_qty_07" "pg_catalog"."numeric", - "sum_qty_08" "pg_catalog"."numeric", - "sum_qty_09" "pg_catalog"."numeric", - "sum_qty_10" "pg_catalog"."numeric", - "sum_qty_11" "pg_catalog"."numeric", - "sum_qty_12" "pg_catalog"."numeric", - "sum_qty_13" "pg_catalog"."numeric", - "sum_qty_14" "pg_catalog"."numeric", - "sum_qty_15" "pg_catalog"."numeric", - "sum_qty_16" "pg_catalog"."numeric", - "sum_qty_17" "pg_catalog"."numeric", - "sum_qty_18" "pg_catalog"."numeric", - "sum_qty_19" "pg_catalog"."numeric", - "sum_qty_20" "pg_catalog"."numeric", - "creation_date" "pg_catalog"."timestamp", - "last_update_date" "pg_catalog"."timestamp", - "created_by" "pg_catalog"."int4", - "last_updated_by" "pg_catalog"."int4", - "tenant_id" "pg_catalog"."int8" NOT NULL DEFAULT '-1'::integer, - "supply_center_code" "pg_catalog"."varchar" COLLATE "pg_catalog"."default", - "head_id" "pg_catalog"."int8", - "lock_version" "pg_catalog"."int2" NOT NULL DEFAULT 0 -) -; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."workbench_code" IS '工作台代码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."planning_item_code" IS '计划对象编码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."planning_period_type_code" IS '期次类型码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."planning_period_code" IS '期次码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."demand_unit_code" IS '需求计划单元'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."supply_unit_code" IS '供应计划单元'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."attribute_code" IS '属性码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."planner_code" IS '计划员代码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."figure_code" IS '数据维度码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."product_hierarchy_code" IS '产品树编码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."product_category_code" IS '产品编码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."product_hierarchy_path" IS '产品树路径'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."config_part_code" IS '配置项编码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."approval_instance_id" IS '审批实例ID,editable_flag=TRUE的figure_code才需要审批流实例'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."source_workbench_code" IS '来源工作台代码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."source_figure_group_code" IS '来源维度组'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."source_figure_code" IS '来源数据维度码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."source_period_type_code" IS '来源期次类型码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."source_period_code" IS '来源期次码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."aggregated_type" IS 'NONE;MATERIAL_GROUP;PRODUCT_CATEGORY;SUPPLY_UNIT'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."customer_no" IS '客户代码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."contract_no" IS '合同号'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."project_code" IS '项目编码'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."supplier_no" IS '供应商号'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."production_delivery_method" IS '生产交付模式:ETO,MTO,MTS'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_001" IS 'bucket数量1'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_002" IS 'bucket数量2'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_003" IS 'bucket数量3'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_004" IS 'bucket数量4'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_005" IS 'bucket数量5'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_006" IS 'bucket数量6'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_007" IS 'bucket数量7'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_008" IS 'bucket数量8'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_009" IS 'bucket数量9'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_010" IS 'bucket数量10'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_011" IS 'bucket数量11'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_012" IS 'bucket数量12'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_013" IS 'bucket数量13'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_014" IS 'bucket数量14'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_015" IS 'bucket数量15'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_016" IS 'bucket数量16'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_017" IS 'bucket数量17'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_018" IS 'bucket数量18'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_019" IS 'bucket数量19'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_020" IS 'bucket数量20'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_021" IS 'bucket数量21'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_022" IS 'bucket数量22'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_023" IS 'bucket数量23'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_024" IS 'bucket数量24'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_025" IS 'bucket数量25'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_026" IS 'bucket数量26'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_027" IS 'bucket数量27'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_028" IS 'bucket数量28'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_029" IS 'bucket数量29'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_030" IS 'bucket数量30'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_031" IS 'bucket数量31'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_032" IS 'bucket数量32'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_033" IS 'bucket数量33'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_034" IS 'bucket数量34'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_035" IS 'bucket数量35'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_036" IS 'bucket数量36'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_037" IS 'bucket数量37'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_038" IS 'bucket数量38'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_039" IS 'bucket数量39'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_040" IS 'bucket数量40'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_041" IS 'bucket数量41'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_042" IS 'bucket数量42'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_043" IS 'bucket数量43'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_044" IS 'bucket数量44'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_045" IS 'bucket数量45'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_046" IS 'bucket数量46'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_047" IS 'bucket数量47'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_048" IS 'bucket数量48'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_049" IS 'bucket数量49'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_050" IS 'bucket数量50'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_051" IS 'bucket数量51'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_052" IS 'bucket数量52'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_053" IS 'bucket数量53'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_054" IS 'bucket数量54'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_055" IS 'bucket数量55'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_056" IS 'bucket数量56'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_057" IS 'bucket数量57'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_058" IS 'bucket数量58'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_059" IS 'bucket数量59'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_060" IS 'bucket数量60'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_061" IS 'bucket数量61'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_062" IS 'bucket数量62'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_063" IS 'bucket数量63'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_064" IS 'bucket数量64'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_065" IS 'bucket数量65'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_066" IS 'bucket数量66'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_067" IS 'bucket数量67'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_068" IS 'bucket数量68'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_069" IS 'bucket数量69'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_070" IS 'bucket数量70'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_071" IS 'bucket数量71'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_072" IS 'bucket数量72'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_073" IS 'bucket数量73'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_074" IS 'bucket数量74'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_075" IS 'bucket数量75'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_076" IS 'bucket数量76'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_077" IS 'bucket数量77'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_078" IS 'bucket数量78'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_079" IS 'bucket数量79'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_080" IS 'bucket数量80'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_081" IS 'bucket数量81'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_082" IS 'bucket数量82'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_083" IS 'bucket数量83'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_084" IS 'bucket数量84'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_085" IS 'bucket数量85'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_086" IS 'bucket数量86'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_087" IS 'bucket数量87'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_088" IS 'bucket数量88'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_089" IS 'bucket数量89'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_090" IS 'bucket数量90'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_091" IS 'bucket数量91'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_092" IS 'bucket数量92'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_093" IS 'bucket数量93'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_094" IS 'bucket数量94'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_095" IS 'bucket数量95'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_096" IS 'bucket数量96'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_097" IS 'bucket数量97'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_098" IS 'bucket数量98'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_099" IS 'bucket数量99'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_100" IS 'bucket数量100'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_101" IS 'bucket数量101'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_102" IS 'bucket数量102'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_103" IS 'bucket数量103'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."bk_qty_104" IS 'bucket数量104'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."sum_qty_01" IS '汇总数量1'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."sum_qty_02" IS '汇总数量2'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."sum_qty_03" IS '汇总数量3'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."sum_qty_04" IS '汇总数量4'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."sum_qty_05" IS '汇总数量5'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."sum_qty_06" IS '汇总数量6'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."sum_qty_07" IS '汇总数量7'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."sum_qty_08" IS '汇总数量8'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."sum_qty_09" IS '汇总数量9'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."sum_qty_10" IS '汇总数量10'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."sum_qty_11" IS '汇总数量11'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."sum_qty_12" IS '汇总数量12'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."sum_qty_13" IS '汇总数量13'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."sum_qty_14" IS '汇总数量14'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."sum_qty_15" IS '汇总数量15'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."sum_qty_16" IS '汇总数量16'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."sum_qty_17" IS '汇总数量17'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."sum_qty_18" IS '汇总数量18'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."sum_qty_19" IS '汇总数量19'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."sum_qty_20" IS '汇总数量20'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."tenant_id" IS '租户ID'; -COMMENT ON COLUMN "themetis_scp"."scp_sop_waterfall_bucket_data"."supply_center_code" IS '供应中心'; -COMMENT ON TABLE "themetis_scp"."scp_sop_waterfall_bucket_data" IS 'DP需求预测bucket数据'; - --- ---------------------------- --- Indexes structure for table scp_simulation_scenario --- ---------------------------- -CREATE UNIQUE INDEX "scp_simulation_scenario_idx" ON "themetis_scp"."scp_simulation_scenario" USING btree ( - "sim_scenario_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "tenant_id" "pg_catalog"."int8_ops" ASC NULLS LAST -); - --- ---------------------------- --- Primary Key structure for table scp_simulation_scenario --- ---------------------------- -ALTER TABLE "themetis_scp"."scp_simulation_scenario" ADD CONSTRAINT "scp_simulation_scenario_pkey" PRIMARY KEY ("id"); - --- ---------------------------- --- Indexes structure for table scp_sop_bucket_data --- ---------------------------- -CREATE INDEX "scp_sop_bucket_data_idx01" ON "themetis_scp"."scp_sop_bucket_data" USING btree ( - "tenant_id" "pg_catalog"."int8_ops" ASC NULLS LAST, - "head_id" "pg_catalog"."int8_ops" ASC NULLS LAST, - "figure_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST -); -CREATE INDEX "scp_sop_bucket_data_idx1" ON "themetis_scp"."scp_sop_bucket_data" USING btree ( - "planning_item_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "figure_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "tenant_id" "pg_catalog"."int8_ops" ASC NULLS LAST -); -CREATE INDEX "scp_sop_bucket_data_idx2" ON "themetis_scp"."scp_sop_bucket_data" USING btree ( - "product_hierarchy_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "product_category_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "figure_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "tenant_id" "pg_catalog"."int8_ops" ASC NULLS LAST -); -CREATE UNIQUE INDEX "scp_sop_bucket_data_uidx" ON "themetis_scp"."scp_sop_bucket_data" USING btree ( - "workbench_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "planning_period_type_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "planning_period_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "demand_unit_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "supply_unit_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "supply_center_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "planning_item_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "attribute_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "figure_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "product_hierarchy_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "product_category_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "tenant_id" "pg_catalog"."int8_ops" ASC NULLS LAST, - "customer_no" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "contract_no" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "project_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "supplier_no" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "production_delivery_method" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST -); -CREATE UNIQUE INDEX "scp_sop_bucket_data_uidx_n" ON "themetis_scp"."scp_sop_bucket_data" USING btree ( - COALESCE(attribute_code, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(contract_no, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(customer_no, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(planning_item_code, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(product_category_code, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(product_hierarchy_code, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(production_delivery_method, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(project_code, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(supplier_no, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(supply_unit_code, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "supply_center_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "demand_unit_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "figure_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "planning_period_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "planning_period_type_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "tenant_id" "pg_catalog"."int8_ops" ASC NULLS LAST, - "workbench_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST -); - --- ---------------------------- --- Primary Key structure for table scp_sop_bucket_data --- ---------------------------- -ALTER TABLE "themetis_scp"."scp_sop_bucket_data" ADD CONSTRAINT "scp_sop_bucket_data_pkey" PRIMARY KEY ("id"); - --- ---------------------------- --- Indexes structure for table scp_sop_planning_item --- ---------------------------- -CREATE INDEX "scp_sop_planning_item_idx1" ON "themetis_scp"."scp_sop_planning_item" USING btree ( - "planner_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "tenant_id" "pg_catalog"."int8_ops" ASC NULLS LAST -); -CREATE INDEX "scp_sop_planning_item_idx2" ON "themetis_scp"."scp_sop_planning_item" USING btree ( - "planning_item_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "tenant_id" "pg_catalog"."int8_ops" ASC NULLS LAST -); -CREATE INDEX "scp_sop_planning_item_idx3" ON "themetis_scp"."scp_sop_planning_item" USING btree ( - "product_hierarchy_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "product_category_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "tenant_id" "pg_catalog"."int8_ops" ASC NULLS LAST -); -CREATE UNIQUE INDEX "scp_sop_planning_item_uidx" ON "themetis_scp"."scp_sop_planning_item" USING btree ( - "workbench_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "planning_period_type_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "planning_period_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "demand_unit_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "supply_unit_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "supply_center_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "planning_item_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "attribute_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "product_hierarchy_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "product_category_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "tenant_id" "pg_catalog"."int8_ops" ASC NULLS LAST, - "customer_no" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "contract_no" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "supplier_no" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "supplier_no" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "production_delivery_method" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "project_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST -); -CREATE UNIQUE INDEX "scp_sop_planning_item_uidx_n" ON "themetis_scp"."scp_sop_planning_item" USING btree ( - COALESCE(attribute_code, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(contract_no, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(project_code, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(customer_no, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(planning_item_code, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(product_category_code, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(product_hierarchy_code, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(production_delivery_method, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(supplier_no, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(supply_unit_code, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "supply_center_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "demand_unit_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "planning_period_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "planning_period_type_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "tenant_id" "pg_catalog"."int8_ops" ASC NULLS LAST, - "workbench_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST -); - --- ---------------------------- --- Primary Key structure for table scp_sop_planning_item --- ---------------------------- -ALTER TABLE "themetis_scp"."scp_sop_planning_item" ADD CONSTRAINT "scp_sop_planning_item_pkey" PRIMARY KEY ("id"); - --- ---------------------------- --- Indexes structure for table scp_sop_waterfall_bucket_data --- ---------------------------- -CREATE INDEX "scp_sop_waterfall_bucket_data_idx01" ON "themetis_scp"."scp_sop_waterfall_bucket_data" USING btree ( - "tenant_id" "pg_catalog"."int8_ops" ASC NULLS LAST, - "head_id" "pg_catalog"."int8_ops" ASC NULLS LAST, - "figure_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST -); -CREATE INDEX "scp_sop_waterfall_bucket_data_idx1" ON "themetis_scp"."scp_sop_waterfall_bucket_data" USING btree ( - "planning_item_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "figure_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "tenant_id" "pg_catalog"."int8_ops" ASC NULLS LAST -); -CREATE INDEX "scp_sop_waterfall_bucket_data_idx2" ON "themetis_scp"."scp_sop_waterfall_bucket_data" USING btree ( - "product_hierarchy_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "product_category_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "figure_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "tenant_id" "pg_catalog"."int8_ops" ASC NULLS LAST -); -CREATE UNIQUE INDEX "scp_sop_waterfall_bucket_data_uidx" ON "themetis_scp"."scp_sop_waterfall_bucket_data" USING btree ( - "workbench_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "planning_period_type_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "planning_period_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "demand_unit_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "supply_unit_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "planning_item_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "attribute_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "figure_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "product_hierarchy_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "product_category_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "tenant_id" "pg_catalog"."int8_ops" ASC NULLS LAST, - "customer_no" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "contract_no" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "project_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "supplier_no" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "production_delivery_method" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "supply_center_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "aggregated_type" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST -); -CREATE UNIQUE INDEX "scp_sop_waterfall_bucket_data_uidx_n" ON "themetis_scp"."scp_sop_waterfall_bucket_data" USING btree ( - COALESCE(attribute_code, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(contract_no, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(customer_no, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(planning_item_code, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(product_category_code, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(product_hierarchy_code, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(production_delivery_method, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(project_code, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(supplier_no, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - COALESCE(supply_unit_code, '-999'::character varying) COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "demand_unit_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "figure_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "planning_period_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "planning_period_type_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "tenant_id" "pg_catalog"."int8_ops" ASC NULLS LAST, - "workbench_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "aggregated_type" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST, - "supply_center_code" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST -); - --- ---------------------------- --- Primary Key structure for table scp_sop_waterfall_bucket_data --- ---------------------------- -ALTER TABLE "themetis_scp"."scp_sop_waterfall_bucket_data" ADD CONSTRAINT "scp_sop_waterfall_bucket_data_pkey" PRIMARY KEY ("id");