zoukankan      html  css  js  c++  java
  • Postgresql 迁移随笔一

    最近忙于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

  • 相关阅读:
    vss的ss.ini丢失或损坏导致的vss无法登录错误
    prtvu xsdabljc 视图代码
    安装Ehlib经验
    PHP连接MSSQL
    在Access中实现 case when功能
    快捷输入电大学号 delphi代码
    毕业预警的SP
    新系统班级名称规范化
    查询哪些学生没有做课程注册
    第一个PHP数据库查询应用
  • 原文地址:https://www.cnblogs.com/zhucl1006/p/5680295.html
Copyright © 2011-2022 走看看