2015-10-13 43 views
0

我正在從MYSQL數據遷移到postgre。 如何插入MySQL數據在Postgre表中? 在此先感謝 代碼:到postgre

try { 


$conexion = new PDO("mysql:host=$direccion;dbname=$base_d", $us, $contra); 

$conexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 


      $consulta = $conexion->prepare('SELECT * FROM ' . $tabla_b); 

      //Ejecuto la consulta 
      $consulta->execute(); 

      $consulta_array = $consulta->fetchAll(); 


      var_export($consulta_array); 

$dbconn = pg_connect("host=$direccion2 dbname=$base_d2 user=$us2 password=$contra2") 
or die('No se ha podido conectar: ' . pg_last_error()); 

$insercion= pg_copy_from($conexion, $tabla_b2, $consulta_array,","); 


     } catch (PDOException $e) { 

    echo "Error conectando con la base de datos: " . $e->getMessage(); 
     } 
    } 

回答

1

你有沒有試着用Pgloader工作?

我發現它非常快速和有效的方式MySQL遷移到Postgres的。

下面是如何與Pgloader進行一個簡單的例子。

創建具有以下內容的.load文件。您可以排除不需要的行以「 - 」前面

load database 
    from  mysql://[email protected]/base_d 
    into postgresql:///base_d 

WITH include drop, create tables, no truncate, 
     create indexes, reset sequences, foreign keys 

-- SET maintenance_work_mem to '128MB', work_mem to '12MB', search_path to 'base_d' 
CAST type datetime to timestamptz 
       drop default drop not null using zero-dates-to-null, 
     type date drop not null drop default using zero-dates-to-null 

-- MATERIALIZE VIEWS film_list, staff_list 

-- INCLUDING ONLY TABLE NAMES MATCHING ~/film/, 'actor' 
-- EXCLUDING TABLE NAMES MATCHING ~<ory> 

BEFORE LOAD DO 
$$ create schema if not exists base_d; $$; 

注意的是,這裏pgloader將受益於MySQL數據庫中發現的元數據信息,以創建能夠PostgreSQL數據庫按照所述託管數據,然後加載數據。

注意,我們使用pgloader的兌現VIEWS條款:這裏選擇的意見將被遷移到PostgreSQL的用自己的內容。

here下載Pgloader。現在

可以使用pgloader命令來遷移數據。

$ pgloader base_d.load

參考(其中保存上述內容的文件):http://pgloader.io/howto/mysql.html

+0

雖然這在理論上可以回答這個問題,[但最好(// meta.stackoverflow.com/q/8259)在這裏包含答案的重要部分,並提供供參考的鏈接。 –

+0

感謝您的評論,我試着給出更詳細的信息來鍛鍊上述要求。 – Jehoshuah

+0

不錯。從我那裏得到讚賞。問候。 –