Postgres外部数据包装器:插入mysql表主键增量问题



我正在使用PostgreSQL外部数据包装器Multicorn(它使用SQLAlchemy)从外部MySQL数据库映射表。到目前为止,一切似乎都很好,除了一个问题:如果我在没有指定主ID的情况下对我的外部mysql表运行插入查询,因为它被设置为自动递增,外部数据包装器会尝试追加并从1开始递增,即使这样的键已经存在于远程mysql表中。下面的例子可以更好地解释这一点:

MySQL表:

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

MySQL table data:

select * from test;
+----+-------+
| id | value |
+----+-------+
|  1 | val1  |
|  2 | val2  |
|  3 | val3  |
+----+-------+
PostgreSQL FDW server:
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:root@127.0.0.1/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?

如果在PostgreSQL端使用int而不是serial会怎么样?

create foreign table test1 (
    id int,
    value character varying
) server test options (
    tablename 'test',
    db_url 'mysql://root:root@127.0.0.1/test',
    primary_key 'id'
);

相关内容

  • 没有找到相关文章

最新更新