2012-04-16 55 views
0

我们是SQL Server用户,最近我们在PostgreSQL上有一个数据库。出于一致性的目的,我们将SQL Server 2000上的复制数据库复制到SQL Server 2000上的其他数据库,现在我们还需要将其复制到PostgreSQL上的数据库中。我们能够使用ODBC和链接服务器来实现这一点。我们为PostgreSQL上的数据库创建了一个ODBC DSN,并使用该DSN我们在SQL Server上创建了一个链接服务器。我们能够将表格从SQL Server数据库复制到该链接的服务器,并因此成功复制到PostgreSQL数据库。现在面临的问题是复制时,数据类型位,数字(12,2)和小数(12,2)分别转换为字符(1),字符(40)和字符(40)。有没有解决方法可以在PostgreSQL数据库中保留这些数据类型?我的意思是这个位应该变成布尔值,数字和十进制数据类型应该保留在postgresql的复制表中。我们使用PostgreSQL的9.x从SQL Server 2000到PostgreSQL的数据库复制

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), 
) 

非常感谢你。

+1

也许最好问在[DBA](http://dba.stackexchange.com/)。 – Filburt 2012-04-16 07:27:13

+1

欢迎使用StackOverflow:如果您发布代码,XML或数据样本,请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(“{}”)以精确地格式化和语法突出它! – 2012-04-16 07:30:11

+0

“*数据类型转换为*”:哪种工具执行此转换?你可以预先创建表格manuall,以便这种(显然是错误的)自动转换不会发生? – 2012-04-16 10:37:02

回答

1

请使用:

  1. boolean类型true/false类型的列(有Postgres里没有bit型);
  2. NUMERIC类型也存在于PostgreSQL中(根据SQL标准)。但我建议你最好使用real PostgreSQL类型,因为它的运行速度会更快。

我建议你手动在PostgreSQL端创建目标表,指定合适的字段类型,因为ODBC + Linked Server组合不会正常工作。

您可以随时咨询this part官方文档的现有数据类型。

+1

如果你需要确切的数值,'real'不是一个好的选择。数字是一个更好的选择。 – 2012-04-16 08:38:01

相关问题