即时将SQL Server查询转换为Postgres

时间:2015-03-04 16:14:11

标签: sql-server postgresql tsql

我有一个场景,我在需要在数据库上执行的Web服务上获取查询。

这些查询的来源来自物理设备,因此我无法真正更改查询的输入。

我从MSSQL中的设备获取查询。早期的后端是在SQL Server中,因此事情非常简单。查询将进入并按原样在DB上执行。

现在我们已经迁移到Postgres,我们没有必要修改输入数据(SQL查询)。

我想知道的是。是否有任何库可以为我执行此SQL Server / T-SQL转换,因此我可以通过此运行SQL Server查询并在数据库上执行生成的Postgres查询。我搜索了很多,但找不到太多会这样做。 (有些库可以将模式从一个转换为另一个,但我需要的是能够动态地将SQL Server查询转换为Postgres)

我知道SQL和postgres之间会有很多不同的细微差别,因此需要在它们之间使用翻译器。我对任何语言的图书馆开放(最好是在linux上运行:))或者如果你有任何其他的建议,也欢迎这样做。


谢谢!

3 个答案:

答案 0 :(得分:1)

如果我能担任您的职务,那么我希望尽快将SQL Sever升级到2019年(截至今天,您可以find on Twitter索取正式支持的生产就绪版本)。然后看看它们在此版本中重新引入的 --whole-archive For each archive mentioned on the command line after the --whole-archive option, include every object file in the archive in the link, rather than searching the archive for the required object files. This is normally used to turn an archive file into a shared library, forcing every object to be included in the resulting shared library. This option may be used more than once. Two notes when using this option from gcc: First, gcc doesn’t know about this option, so you have to use -Wl,-whole-archive. Second, don’t forget to use -Wl,-no-whole-archive after your list of archives, because gcc will add its own list of archives to your link and you may not want this flag to affect those as well. 功能。简而言之,它允许您将MSSQL实例连接到其他数据源(如Postgres)并以“普通” SQL Server DB(通过T-SQL)的方式查询数据,然后在后台将查询转换为本地pgsql,并从您的真实资源中使用。 该产品(作为2019年版本)的资源尚不多,但似乎是此版本中功能最强大的功能之一。

This是BOL所说的(不幸的是,它主要涵盖了2016年的旧版本)。

There isBob Ward的精彩而简短的演讲( 首席架构师(Microsoft),他在SQL Bits 2019期间就此主题做了工作。

答案 1 :(得分:0)

我唯一可以想到可能值得尝试的是SQL::Translator。它是一组Perl模块,已经存在了很长时间但似乎仍然保持着。它是否符合您的要求将取决于这些查询的详细程度。

答案 2 :(得分:0)

毫不费力的解决方案是保持SQL Server Express的存在并引入调用Postgres数据库的触发器。

如果这太重了,您可以查看创建具有有限功能的表格数据流(TDS是SQL Server网络传输)网关,并将每个可能的传入查询与任何参数映射到静态Postgres查询。这限制了对有限的,少量的案例的任何测试。

这样,没有SQL Server,并且你有更多的控制权,而不是触发选项。

如果您的终端需要有限的方言,那么这可能是实用的。尝试一般翻译很可能比替换设备成本更高(除非你已经部署了数百万)。

如果您对C或Java感到满意,可以使用一个开放的实现FreeTDS