2014-03-12 42 views
0

我正在使用PostgreSQL外部數據包裝Multicorn(它使用SQLAlchemy)來映射來自外部MySQL數據庫的表。到目前爲止,一切似乎都工作正常,除了一個問題:如果我在沒有指定主ID的情況下對我的外部mysql表運行插入查詢,因爲它設置爲自動增量,外部數據包裝嘗試追加並從1開始增加,即使這樣的密鑰已經存在於遠程MySQL表中。這是更好地通過例子來說明:Postgres外部數據包裝:插入到mysql表主鍵增量問題

MySQL表:

CREATE TABLE `test` (
    `id` INT NOT NULL AUTO_INCREMENT, 
    `value` VARCHAR(100) NULL DEFAULT NULL, 
    PRIMARY KEY (`id`)); 

MySQL表數據:

select * from test; 
+----+-------+ 
| id | value | 
+----+-------+ 
| 1 | val1 | 
| 2 | val2 | 
| 3 | val3 | 
+----+-------+ 

PostgreSQL的FDW服務器:

CREATE SERVER test foreign data wrapper multicorn options (wrapper 'multicorn.sqlalchemyfdw.SqlAlchemyFdw'); 

PostgreSQL的FDW表:

create foreign table test1 (
    id serial, 
    value character varying 
) server test options (
    tablename 'test', 
    db_url 'mysql://root:[email protected]/test', 
    primary_key 'id' 
); 

這是我試過的插入語句:

insert into test1 (value) values ('val4'); 

它拋出這個錯誤:

ERROR: Error in python: IntegrityError 
DETAIL: (IntegrityError) (1062, "Duplicate entry '1' for key 'PRIMARY'") 'INSERT INTO test (id, value) VALUES (%s, %s)' (1L, u'val4') 

出於某種原因,有一個嘗試手動插入主ID,我」在兩個數據庫/表上都指定爲自動增量。爲什麼會發生這種情況,我該如何解決?是什麼導致了這個,是Postgres,FDW插件Multicorn還是SQLAlchemy?

回答

2

如果在PostgreSQL端使用int而不是serial會怎麼樣?

create foreign table test1 (
    id int, 
    value character varying 
) server test options (
    tablename 'test', 
    db_url 'mysql://root:[email protected]/test', 
    primary_key 'id' 
); 
+0

令人驚訝的簡單。 – Caballero