最近忙于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. js用户修改密码功能模块

    ;(function(){ var ajaxSub = false, showError = function(msg){ if(msg){ $('#er_txt').html(msg).show() ...

  2. 关于 escape、encodeURI、encodeURIComponent

    参考资料:http://hi.baidu.com/flondon/item/983b3af35b83fa13ce9f3291   http://www.w3school.com.cn/js/jsref ...

  3. Hive自定义函数的学习笔记(1)

    前言: hive本身提供了丰富的函数集, 有普通函数(求平方sqrt), 聚合函数(求和sum), 以及表生成函数(explode, json_tuple)等等. 但不是所有的业务需求都能涉及和覆盖到 ...

  4. DFS序详解

    dfs序就是一棵树在dfs遍历时组成的节点序列. 它有这样一个特点:一棵子树的dfs序是一个区间. 下面是dfs序的基本代码: void dfs(int x,int pre,int d){//L,R表 ...

  5. SQL 行转列和列转行2

    DECLARE @T TABLE (columnName varchar(100) NOT NULL PRIMARY KEY); INSERT INTO @T SELECT columnName fr ...

  6. apache不断占内存过大,导致虚拟机内存不足,处理方法。

    我用512M的vps,访问量不大,但内存占用很大,甚至宕机. 我用top,然后shitf+m发现,httpd占用内存极大.经过网上找资料设置后,用过一段时间终于没再出现内存问题了. 首先查找配置文件的 ...

  7. Linux-Rsync服务器/客户端搭建实战

    一.需求 每晚汇总各机器的操作日志,同步到主服务器进行日志分析. 二.基础知识 rsync 分为服务器端.客户端,服务器端搭建比客户端辛苦一些(也是很简单). rsync 服务器是指以 deamon ...

  8. sublime插件使用整理

    考虑到后续要有更多的时间来写js,周末好好的把sublime整理了下,很多插件非常好.下面一一来说 1.  注释生成插件 DocBlockr 之前每次写函数的注释都要复制其他函数的注释,然后在写,非常 ...

  9. chp-adapter 文件结构

    1.需要接口给chp推送数据的Bean,写到/chp-adapter/src/main/java/com/creditharmony/adapter/service 文件夹中,并添加父类,供chp业务 ...

  10. SQL Server 开发-语法学习

    一.定义变量 --简单赋值 declare @a int print @a --使用select语句赋值 ) select @user1='张三' print @user1 ) print @user ...