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

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

非常感谢。

4

2 回答 2

1

Please, use:

  1. boolean type for true/false type of columns (there's no bit type in postgres);
  2. NUMERIC type exists also in the PostgreSQL (according to the SQL standard). But I suggest you should better use real PostgreSQL type, as it will be working faster.

I recommend you to create target table on the PostgreSQL side manually, specifying proper field types, as ODBC+Linked Server combination is not doing it's job properly.

You can always consult this part of the official documentation for existing data types.

于 2012-04-16T08:04:12.037 回答
0

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

于 2012-04-16T14:58:13.157 回答