最近忙于MSSQL 迁移到Postgresql的工程,在这里记录一下迁移遇到的问题以及解法。

程序语言:java

要求,根据不同的driver可以同时支援多种数据库,目前主要为MSSQL 和Postgresql

case 1.大小写敏感,MSSQL可以设置大小写不敏感,但是Postgresql是大小写敏感的。相同的select方法会导致postgresql中执行失败。

目前解法:

严格要求数据库中大小写规范,并代码中再select中使用双引号进行栏位以及表名的查询。

MSSQL和Postgresql 可以同时支援对应的语法。

(非特别的语句或关键字执行通过)。

解法2:全部转成小写。 因为MSSQL大小写不敏感,所以转小写后,MSSQL一样支援。

值的大小写查询。可以使用正则表达式,或使用索引,创建允许大小写无关搜索,见索引参考。

正则表达式:

正则表达式匹配操作符:

操作符 描述 例子
~ 匹配正则表达式,大小写相关 'thomas' ~ '.*thomas.*'
~* 匹配正则表达式,大小写无关 'thomas' ~* '.*Thomas.*'
!~ 不匹配正则表达式,大小写相关 'thomas' !~ '.*Thomas.*'
!~* 不匹配正则表达式,大小写无关 'thomas' !~* '.*vadim.*'

例如:

找出数据表account中所有用户名包含baidu且不区分大小写的用户的信息。

select * from account where username ~* 'baidu';

使用正则表达式之后可以实现不区分大小写的功能,并且大大减少了sql语句的长度。

摘自:http://blog.163.com/clevertanglei900@126/blog/static/1113522592010102215419516/

case 2:存储过程,MSSQL和Postgresql中都有存储过程,但是呼叫的方式不同。 

MSSQL中,可以使用call 或exec的方法执行,但是Postgresql中不支援call的呼叫方式,为了达到同一套code支援两种db

目前解法:移植存储过程到java中(但是这样效能上,以及灵活上会有一定的差异,鉴于目前工程中SP逻辑较为简单,所以进行移植)

case 3:MSSQL中,大部分Id的栏位会是自动增长的类型 。 

Postgresql中,使用序列对象(SEQUENCE)来进行。

例如:

DROP SEQUENCE IF EXISTS public."Table_Id_seq";

CREATE SEQUENCE public."Table_Id_seq"
INCREMENT 1 -- 一个正值将产生一个上升序列,一个负值会产生一个下降序列。如果 没有指定,旧的增量值将被保持
MINVALUE 1  --最小值
MAXVALUE 9223372036854775807  --最大值
START 1 -- 开始值
CACHE 1;  回卷
ALTER TABLE public."Table_Id_seq"
OWNER TO postgres;

参考:http://www.postgres.cn/docs/9.5/sql-altersequence.html

case 4:索引(index) MSSQL中,一些表中会存在索引,Postgresql中将重新建立对应的索引。

索引主要用于提升执行效率。

PostgreSQL提供了索引方法 B-树、哈希、GiST、SP-GiST 以及 GIN。用户也可以定义自己的索引 方法,但是相对较复杂。

DROP INDEX IF EXISTS public."Table_Increment_Key";

CREATE INDEX "Table_Increment_Key"
ON public."Table"
USING btree--要使用的索引方法的名称。可以选择 btreehash、 gistspgistgin。 默认方法是btree
("Id"); -- 一个表列的名称

参考:http://www.postgres.cn/docs/9.5/sql-createindex.html

Postgresql 迁移随笔一的更多相关文章

  1. Postgresql迁移数据文件存放位置

    1. POSTGRESQL的安装 centos7 里面默认的pgsql的版本是 如果想用更高的版本需要执行以下如下的命令 rpm -ivh https://download.postgresql.or ...

  2. MPP - GreenPlum数据库安装以及简单使用

    一.集群介绍 共3台主机,ip 为193.168.0.93   193.168.0.94  193.168.0.95 集群对应master和segment如下,193.168.0.93为master节 ...

  3. UTL_FILE 包使用介绍

    Postgresql 不支持 package功能,这给oracle 向 postgresql迁移增加了很多迁移工作.人大金仓Kingbase数据库实现了类似 oracle package 功能,并提供 ...

  4. 将GitLab数据库从阿里云PostgreSQL RDS迁移至自建的PostgreSQL服务器

    阿里云RDS目前支持的是PostgreSQL 9.4,而gitlab支持的最低版本是PostgreSQL 9.6.1,不升级PostgreSQL,gitlab就无法升级,阿里云RDS短期内不进行升级, ...

  5. [原创]从Oracle和Microsoft Sql Server迁移到PostgreSQL Plus Advanced Server

    一.了解PPAS的迁移方式1.在线迁移和离线迁移使用Migration Studio或Migration Toolkit直接向PPAS数据库进行对象定义和数据表中数据的迁移称为在线迁移,生成要迁移对象 ...

  6. 一次PostgreSql数据迁移,使用nodejs来完成

    2014-02-08 XX开放平台不允许使用站外的服务器了,可是我们的app都在站外,数据库也在站外,全都要求迁移到其云主机上(坑爹啊).我们在其云主机上仅有有限的资源,而且也有在运行中的数据库,要做 ...

  7. macOS上的ODBC-利用unixODBC连接PostgreSQL与SQLite并进行数据迁移

    安装UnixODBC & PSQLODBC driver for UnixODBC $ brew install psqlodbc Updating Homebrew... ==> In ...

  8. Oracle迁移至PostgreSQL工具之Ora2Pg

    1. 描述 Ora2Pg是一个免费的工具,用于将Oracle数据库迁移到PostgreSQL兼容的模式.它连接您的Oracle数据库,自动扫描并提取它的结构或数据,然后生成可以装载到PostgreSQ ...

  9. postgresql 数据库路径迁移

    迁移方法有两种:(1)重新初始化postgresql数据库,初始化时指定新的数据路径---PGDATA,然后在新的环境下将原有的数据库备份恢复一下.不过这个方法有点麻烦(2)直接将现有的数据库文件全部 ...

随机推荐

  1. 使用第三方框架vapor和swift 搭建本地服务器

    在网上看到一篇教程,使用vapor搭建服务端,自己记录下来备忘本文主要记录以下几点 1.配置好Vapor 2.用Swift写GET,POST方法,返回JSON数据 3.配置本地服务器,编译运行在浏览器 ...

  2. HTML label标签的for属性--input标签的accesskey属性

    本次示例是在firefox演示(如果其他浏览器对accesskey操作不成功的,请参考文章最后各浏览器下的快捷键)label的for属性是和input的id绑定,当我们点击input前面的文本标识会自 ...

  3. 最小生成树——prim算法

    prim算法是选取任意一个顶点作为树的一个节点,然后贪心的选取离这棵树最近的点,直到连上所有的点并且不够成环,它的时间复杂度为o(v^2) #include<iostream>#inclu ...

  4. JS中正则匹配的三个方法match exec test的用法

    javascript中正则匹配有3个方法,match,exec,test: match是字符串的一个方法,接收一个RegExp对象做为参数: match() 方法可在字符串内检索指定的值,或找到一个或 ...

  5. html5 EvnetSource 与 JSP页面结合使用

    最近一直在研究前端的技术,特别是html5的技术,本人觉得html5的发展将越来越好,废话少说.看到了EventSource,根据官方的说法是服务器向客户端的推送服务.自己想找一些例子看看,发现都是P ...

  6. 解决Oracle 11g ORA-01017错误代码

    在oracle的之前版本时, 你的用户名密码是大小写不敏感的, 但在11g中, 数据库默认密码的大小写是敏感的, 于是我们就知道了一个事实, 那就是jdbc在给oracle密码时, 会将其变成大写,真 ...

  7. HTML中的属性、段落、标题、换行等

    HTML的属性html标签的属性总是以名称/值(name=“value”)的方式出现:属性总是在html元素的开始标签中规定: 1.html链接由<a>标签定义,url在href中指定:& ...

  8. Eclipse中web项目部署至Tomcat步骤

    Eclipse的web工程至Tomcat默认的部署目录是在工程空间下,本文旨在将部署目录改为Tomcat安装目录,并解决依赖包输出问题. 1.在Eclipse中添加Tomcat服务器. 2.将web工 ...

  9. install Hadoop

    Installing Java Hadoop runs on both Unix and Windows operating systems, and requires Java to beinsta ...

  10. zabbix3.0安装【server】

    关于zabbix的介绍,就不多说了,功能强大,架构前卫,自己直接去官网研究 在这里,还是秉承研究一个应用或者技术,都要自己动手安装部署,实战操作,才能深入掌握,基于这个精神,zabbix从安装部署开始 ...