将位数据类型数据从SQL Server导出到PostgreSQL

时间:2017-01-16 09:21:21

标签: sql-server postgresql

我在SQL Server中有表tbl_mak,其中包含以下数据:

CREATE TABLE tbl_mak
(
   col_bit bit 
);

insert into tbl_mak values(1);
insert into tbl_mak values(0);

导出到平面文件(.txt)后,我得到以下值:

col_bit
True
False

我在PostgreSQL 9.5中有下表:

CREATE TABLE tbl_mak
(
   col_bit bit 
);

现在我想将导出的数据从SQL Server导入PostgreSQL。

脚本:

\COPY tbl_mak FROM 'D:\mak.txt'

收到错误:

ERROR:  bit string length 5 does not match type bit(1)

3 个答案:

答案 0 :(得分:4)

创建如下表格;使用boolean类型作为字段

CREATE TABLE tbl_mak
(
   col_bit boolean
);

并从文本文件中导入数据,如下所示

COPY tbl_mak FROM 'D:\mak.txt' WITH CSV HEADER DELIMITER AS ' '

答案 1 :(得分:0)

来自Postgres docs

  

写入没有长度的位等同于位(1)

所以提到长度

CREATE TABLE tbl_mak
(
   col_bit bit(5)
);

我认为您可以使用Boolean Type代替BIT

“true”状态的有效文字值为:

TRUE
't'
'true'
'y'
'yes'
'1'

对于“false”状态,可以使用以下值:

FALSE
'f'
'false'
'n'
'no'
'0'

答案 2 :(得分:0)

在Postgresql中,位数据类型与postgres中的SQL-Server不同,它是

bit [ (n) ]   fixed-length bit string

但在SQL-server中它的一个

integer data type that can take a value of 1, 0, or NULL

所以在文件中它为TRUE / FALSE,并且当你试图在postgresql中导入数据时它会出现更多错误请通过link