2015-02-09 22 views
1

我有一些準備好的mysql查詢,我想轉換成Postgres sql。但問題是列名Postgres返回所有名稱爲小寫格式。我可以使用雙引號,但我有很多查詢,所以它非常昂貴。有沒有辦法以駝峯大小寫的方式獲取數據,而不是小寫。如何在camelcase中取得Postgres中的列別名而不是小寫,而不使用雙引號?

+1

這是不可能的,但你爲什麼在意? – 2015-02-09 07:00:05

+0

我有很多現有的查詢。在每次選擇之後使用雙引號是一個大問題。 – 2015-02-09 09:55:50

+0

但是爲什麼你在乎別名是'FooBar'還是'foobar'呢? – 2015-02-09 09:56:27

回答

1

就像@a_horse_with_no_name所說的,對於所有的實際目的來說,這是不可能的。我想你可能會下載源代碼,改變它的工作方式,你喜歡,並重新編譯和測試它。但我認爲這是一個非常糟糕的主意。

在數據庫方面,您有兩個明智的選擇。

  • 用什麼都替換MySQL的反引號。
  • 用雙引號替換MySQL的反引號。

說你從MySQL開始。

create table `Test` (
    `TestId` integer primary key, 
    `TestName` varchar(35) not null 
); 

create or replace view `TestAll` as 
select `TestId`, `TestName` 
from `Test`; 

將所有反引號替換爲空。在PostgreSQL中運行這個。

create table Test (
    TestId integer primary key, 
    TestName varchar(35) not null 
); 

create or replace view TestAll as 
select TestId, TestName 
from Test; 

PostgreSQL會將所有標識符都摺疊爲小寫。一切都會正常工作。 (除非也許你使用保留字,總是一個壞主意。)

第二種方法,用雙引號替換反引號。

create table "Test" (
    "TestId" integer primary key, 
    "TestName" varchar(35) not null 
); 

create or replace view "TestAll" as 
select "TestId", "TestName" 
from "Test"; 

PostgreSQL爲分隔標識符保留大小寫。一切仍然有效。

您選擇的方式可能與您的應用程序代碼編寫方式有關。像Rails,Laravel和Django這樣的Web框架可以產生分隔的標識符。 (我認爲對於所有的Web框架來說都是如此;它是生成SQL的最安全的方式。)其他程序可能使用也可能不使用分隔標識符,並且它們可能或多或少地轉換麻煩。


如果您有文本格式的MySQL的轉儲文件,你可以替換使用這種sed一個班輪雙引號反引號每次。

​​

用這種方法替換每個反引號。

$ sed -i -e 's/`//g' mysql_dump.file 

這樣,sed將在原地修改文件,而不進行備份。使用man sed獲取更多選項。

相關問題