2013-01-16 45 views
0

我將我的應用程序從mysql移植到postgresql。在這種情況下,在大多數情況下,使用駱駝裝載的列名更改爲使用下劃線作爲分隔符。有一對駱駝案件剛剛被刪除。插入到不同列名的mysql和postgresql

我現在需要插入到這兩個數據庫。數據,列數等是相同的,只是列名略有不同。我可以使用PDO切換數據庫驅動程序和插入,但id喜歡這樣做,而無需編寫兩個單獨的插入SQL語句。有沒有一種常用的方法來將列名映射到數組鍵或填充某些類並將其傳遞給PDO。

回答

1
$column_names[] = array('someName'=>'some_name'); 
$column_names[] = array('someOtherName'=>'some_other_name'); 
$column_names[] = array('someOtherNameAgain'=>'some_other_name_again'); 

foreach($column_names as $mysql=>$post_ogre) 
{ 
    //decide which one you want to use here 
} 

類似這樣的東西應該工作

1

您可以通過查看INFORMATION_SCHEMA.COLUMNS表,這是由兩個數據庫支持自動創建列名相關表。

首先,針對MySQL的運行如下命令:

SELECT 
    column_name, 
    ordinal_position, 
    data_type 
FROM information_schema.columns 
WHERE table_schema = 'mysql_dbname' 
    AND table_name = 'mytable' 

然後,對PostgreSQL可以運行在幾乎相同的查詢:

SELECT 
    column_name, 
    ordinal_position, 
    data_type 
FROM information_schema.columns 
WHERE table_schema = 'public' 
    AND table_name = 'mytable' 

現在,看着兩邊column_nameordinal_position,您可以輕鬆地創建新舊列名稱之間的映射表(假設Postgres名稱對您而言是主要的)。您可以分別爲每個表執行此操作,也可以一次完成所有操作(只刪除table_name約束)。

映射已知之後,在任何需要在任何針對MySQL的SQL語句中使用列名的地方,您都必須通過此映射替換它。