transqlate:将任何SQL转换为PostgreSQL方言


transqlate 使用 AST 将 SQL 语段从一种方言转译成另一种方言

  • 将 Oraclisms 翻译为 PostgreSQL 方言
  • 处理标识符大小写
  • 保留空格、大小写和注释
  • 一流的错误报告
  • 解析脚本或任何表达式
  • 具有语法突出显示或 Go 惯用 API 的简单 CLI
  • 遵循Simon Holywell guide进行美化

使用transqlate工具将任何 Oracle SQL 片段转换为 PostgreSQL 方言。

$ transqlate
Type SQL snippet and terminate with ^D
SELECT SYSDATE FROM DUAL; -- my comment
^D
SELECT CURRENT_TIMESTAMP; -- my comment
$


这个最简单的Go入口点就是oracle包:

package main

import (
    "fmt"

    
"gitlab.com/dalibo/transqlate/oracle"
)

func main() {
    pgsql, err := oracle.Translate(
"file.sql", `SELECT SYSDATE FROM DUAL;`)
    if err != nil {
        panic(err.Error())
    }
    fmt.Println(pgsql)
    
// Output: SELECT LOCALTIMESTAMP;
}


参考

  • Ora2Pg - 迁移到 PostgreSQL 的著名开源参考。
  • sqlparser-rs - Rust 的 TDOP SQL 解析器
  • sqlglot - Python 应用程序的 SQL 前端
  • pg_query_go - 在 Go 中使用 Postgres 解析器