2011-08-05 39 views
2

任何人都可以建議一個工具或共享代碼,它可以幫助我在從SQL遷移時將大量數據庫中的t-sql存儲過程轉換爲postgresql服務器數據庫postgresql?將t-sql(SQL Server)存儲過程轉換爲pgsql的工具(postgre sql)

== ==編輯這裏 有一些明確的目標:

  1. 轉換所有SP到postgre SQL不考慮性能/調整等,只注重這種語法是正確的,查詢返回正確的數據

語言轉換和轉換相關準則非常有用。我看到幾個舊的VBScript示例(其中大多數不適合我),並可以嘗試將它們轉換爲T4模板。

我很驚訝沒有人真的需要這種轉換!我仍然沒有一個合適的工具來做到這一點。

在此先感謝。

回答

0
+0

是的,他們都沒有用於sp轉換。 –

+3

我發現了另一個關於從T-SQL轉換到PostgreSQL的[文檔](http://wiki.postgresql.org/images/e/e4/5.pdf),但這不是工具... :-( –

2

翻譯語言很難。您需要解析原文(使用所有奇怪的語法和瑕疵,它超出了文檔所述的範圍),確定名稱的含義,發現語義,並翻譯成目標語言,而不會丟失細微的細節。

如果你找到了這個現成的解決方案,我會感到驚訝。部分問題是有大量的源語言(通過方言使得語言變得更糟)以及大量的目標M,需要一個NxM轉換器庫在四周。如果你等了幾個月,N和M都會移動。一種希望是將N個語言翻譯成普通的通用核心語言,並將其翻譯成M個目標,現在只需要N + M ...但沒有人找到真正通用的語言,如果等待幾個月,N和M無論如何移動。

可以考慮爲該任務構建(或讓其他人構建)特定的翻譯器;這通常是不經濟的,至少如果你希望它是可靠的,因爲很多翻譯機器(解析,名稱解析,模式匹配/翻譯......)傾向於從頭開始重建。

如果您仔細的話,可以通過構建(很多)共享機器來分攤翻譯基礎架構的成本。一旦你這樣做,建立一個翻譯更容易(還不容易),而且對於個別案例來說,經濟學更有意義。你可以閱讀更多關於這種方法:What kinds of patterns could I enforce on the code to make it easier to translate to another programming language?

+0

我不認爲你能找到一個工具,因爲我不相信這是可能的,我們的應用程序支持多個DBMS,我們使用T-SQL編寫,並轉換爲Oracle PL/SQL等。但是PostGreSQL函數是完全不同的,並不是爲了返回選擇查詢的結果而設計的。例如,在PostGreSQL中有一個函數只需返回「Select * from A.AID = B.ID的TableA內連接表B」的結果是很多工作,因爲你需要指定返回類型中的每一列功能。其他DBMS不需要這些。我們可能不會支持PostGreSQL。 –

+0

存儲過程語言都是具有圖靈功能的AFAIK。這意味着可以計算其他可以計算的任何東西。所以,它*是*可能的。當然,這可能是很多的工作,但事實上這是不值得的努力,這是不同的,你不能這樣做。我建立翻譯爲生。我們已經克服了難以翻譯的大多數實際問題,所以我比你更樂​​觀。 –

0

我確定每個SP都需要由開發者轉換。 艾拉巴克斯特說(絕對正確)關於語言,但我想說的平臺差異。例如,如何將不同的平臺轉換爲使用臨時表? 如何處理性能調整的查詢?性能調整使用RDBMS的特定功能,並且不能自動轉換此調整。等等......