2014-02-19 126 views
0

我有一个Microsoft Access SQL转储,我试图导入使用psql -f选项,但导入时出现错误。那么是否有一种方法可以将此SQL转储转换为支持Postgres格式。SQL导入Microsoft Access SQL转储到Postgres

我已经看到一些工具可以将mdb文件转换为相应的表格,但它们不保留现有转储具有的关系和其他约束,并且我希望在导入中保留这些约束。

# psql -U postgres -f test.sql 
psql:test.sql:63: invalid command \Administrators] 
psql:test.sql:570: ERROR: syntax error at or near "Use" 
LINE 1: Use [master] 
     ^

转储包含类似下面

Use [master] 
GO 
EXEC dbo.sp_dbcmptlevel @dbname=N'test', @new_cmptlevel=90 
GO 
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled')) 
begin 
EXEC [test].[dbo].[sp_fulltext_database] @action = 'enable' 
end 
GO 
ALTER DATABASE [test] SET ANSI_NULL_DEFAULT OFF 

. . . . 


IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_ClassOfService_PBX]') AND parent_object_id = OBJECT_ID(N'[dbo].[ClassOfService]')) 
ALTER TABLE [dbo].[ClassOfService] WITH CHECK ADD CONSTRAINT [FK_ClassOfService_PBX] FOREIGN KEY([PBX]) 
REFERENCES [dbo].[PBX] ([ID]) 
ON UPDATE CASCADE 
ON DELETE CASCADE 
GO 
. . . 

那么,有没有办法,我可以导入数据。

+1

包含您收到的错误会很有帮助。 – Drewness

+1

根据经验,我会告诉你用文本编辑器打开转储文件,并逐个浏览所有语句并修改它们以符合postgresql标准。 –

+0

http://wiki.postgresql.org/wiki/Converting_from_other_Databases_to_PostgreSQL#Microsoft_Access –

回答

1

您需要将转储加载回MS Access,然后使用工具从ODBC或类似的MS Access中提取数据。米伦已经指出,several are listed on the PostgreSQL wiki。还有像Talend Studio,Pentaho Kettle和CloverETL这样的通用ETL工具用于数据迁移。

如果只能使用转储,则可能需要手动转换语法。

+0

我有一个转储,我需要转换,因为这将用于安装在干净的系统安装。 – Abhinav

+0

@Abhinav将它还原到一台拥有MS Access的机器,将其转换为PostgreSQL,转储PostgreSQL数据库,然后使用生成的PostgreSQL转储在干净安装中还原到PostgreSQL中。 –

+0

如何将MS Access中的PostgreSQL转换回MS Access。 – Abhinav