从SQL Server 2000到PostgreSQL的数据库复制

时间:2012-04-16 07:11:48

标签: postgresql sql-server-2000 replication

我们是SQL Server用户,最近我们在PostgreSQL上有一个数据库。为了保持一致性,我们将SQL Server 2000上的复制数据库迁移到SQL Server 2000上的其他数据库,现在我们还需要将它复制到PostgreSQL上的数据库中。我们能够使用ODBC和Linked Server来做到这一点。我们在PostgreSQL上为数据库创建了一个ODBC DSN,并使用该DSN在SQL Server上创建了一个链接服务器。我们能够将表从SQL Server数据库复制到该链接服务器,从而成功复制到PostgreSQL数据库。现在面临的问题是复制时,数据类型位,数字(12,2)和小数(12,2)分别转换为字符(1),字符(40)和字符(40)。有关如何在PostgreSQL数据库中保留这些数据类型的解决方案吗?我的意思是该位应该成为布尔值,并且数字和十进制数据类型应该保留在postgresql的复制表中。我们正在使用PostgreSQL 9.x

SQL Server表,

CREATE TABLE tmtbl 
(
    id int IDENTITY (1, 1) NOT NULL PRIMARY KEY,
    Code varchar(15),
    booleancol bit,
    numericcol numeric(10, 2),
    decimalcol decimal(10, 2)
) 

被复制到PostgreSQL之后就变成了,

CREATE TABLE tmtbl
(
  id integer,
  "Code" character varying(15),
  booleancol character(1),
  numericcol character(40),
  decimalcol character(40),
)

非常感谢。

2 个答案:

答案 0 :(得分:1)

请使用:

  1. boolean输入true / false类型的列(postgres中没有bit类型);
  2. PostliSQL中也存在
  3. NUMERIC类型(根据SQL标准)。但我建议你最好使用real PostgreSQL类型,因为它会更快地运行。
  4. 我建议您手动在PostgreSQL端创建目标表,指定正确的字段类型,因为ODBC +链接服务器组合不能正常工作。

    您可以随时查阅有关现有数据类型的官方文档的this part

答案 1 :(得分:0)

你听说过外国数据包装了吗? http://wiki.postgresql.org/wiki/Foreign_data_wrappers