最近忙于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. ionic的tabs

    <ion-tabs class="tabs-icon-top/bottom(决定这个tabs是置于上面还是底部)  tabs-color-active-positive(图标与字体色) ...

  2. dapper 学习

    上一篇, 提到Query<Test>查询的时候, 如果Test中包含自定义class, Dapper不会给自定义class完成映射, 而是直接给null, 其实是可以实现的, 答案就在下面 ...

  3. RGB与HSV颜色空间

    RGB颜色空间 1.三基色原理:大多数的颜色可以通过红.绿.蓝三色按照不同的比例合成产生,同样绝大多数单色光也可以分解成红绿蓝三种色光    红绿蓝三基色按照不同的比例相加合成混色称为相加混色.其中一 ...

  4. 在ubuntu 14.04 64位添加32位库

    网上查了好多,结果发现这个是有用的,做个标记 sudo apt-get install libgtk2.0-0:i386

  5. Android深度探索HAL和驱动开发(卷1) 第一章 Android系统移植和驱动开发

    由于Android是基于Linux内核的,因此,Android和其他Linux系统的核心部分差异非常小.然而不同版本的Android使用的Linux内核的版本有细微的差异,所以不同Android驱动可 ...

  6. ODOO的命令行调用以及config默认值

    通过odoo-bin 可以启动odoo server ,启动的过程中需要提供一些args,包括数据库设置,ip设置等 如果不想每次输入这些参数,可以直接修改odoo/tools/config.py中的 ...

  7. java return

    return语句的作用: 1.返回一个值,可以是任意类型的 2.使程序返回到操作系统,或者说是代表"已经做完,离开此方法" ---------------------------- ...

  8. LeetCode 【347. Top K Frequent Elements】

    Given a non-empty array of integers, return the k most frequent elements. For example,Given [1,1,1,2 ...

  9. 流编辑器-sed

    sed 参数: 1.'s' 替换 sed 's/search-word/replace-word/' file-name 替换file-name文件中的search-word为replace-word ...

  10. Quant的笑话

    Q) Why was the FX quant so unlucky with the ladies?A) Because he always kept his dates short. Q) Why ...