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--要使用的索引方法的名称。可以选择 btree、hash、 gist、spgist和gin。 默认方法是btree
("Id"); -- 一个表列的名称
参考:http://www.postgres.cn/docs/9.5/sql-createindex.html
Postgresql 迁移随笔一的更多相关文章
- Postgresql迁移数据文件存放位置
1. POSTGRESQL的安装 centos7 里面默认的pgsql的版本是 如果想用更高的版本需要执行以下如下的命令 rpm -ivh https://download.postgresql.or ...
- MPP - GreenPlum数据库安装以及简单使用
一.集群介绍 共3台主机,ip 为193.168.0.93 193.168.0.94 193.168.0.95 集群对应master和segment如下,193.168.0.93为master节 ...
- UTL_FILE 包使用介绍
Postgresql 不支持 package功能,这给oracle 向 postgresql迁移增加了很多迁移工作.人大金仓Kingbase数据库实现了类似 oracle package 功能,并提供 ...
- 将GitLab数据库从阿里云PostgreSQL RDS迁移至自建的PostgreSQL服务器
阿里云RDS目前支持的是PostgreSQL 9.4,而gitlab支持的最低版本是PostgreSQL 9.6.1,不升级PostgreSQL,gitlab就无法升级,阿里云RDS短期内不进行升级, ...
- [原创]从Oracle和Microsoft Sql Server迁移到PostgreSQL Plus Advanced Server
一.了解PPAS的迁移方式1.在线迁移和离线迁移使用Migration Studio或Migration Toolkit直接向PPAS数据库进行对象定义和数据表中数据的迁移称为在线迁移,生成要迁移对象 ...
- 一次PostgreSql数据迁移,使用nodejs来完成
2014-02-08 XX开放平台不允许使用站外的服务器了,可是我们的app都在站外,数据库也在站外,全都要求迁移到其云主机上(坑爹啊).我们在其云主机上仅有有限的资源,而且也有在运行中的数据库,要做 ...
- macOS上的ODBC-利用unixODBC连接PostgreSQL与SQLite并进行数据迁移
安装UnixODBC & PSQLODBC driver for UnixODBC $ brew install psqlodbc Updating Homebrew... ==> In ...
- Oracle迁移至PostgreSQL工具之Ora2Pg
1. 描述 Ora2Pg是一个免费的工具,用于将Oracle数据库迁移到PostgreSQL兼容的模式.它连接您的Oracle数据库,自动扫描并提取它的结构或数据,然后生成可以装载到PostgreSQ ...
- postgresql 数据库路径迁移
迁移方法有两种:(1)重新初始化postgresql数据库,初始化时指定新的数据路径---PGDATA,然后在新的环境下将原有的数据库备份恢复一下.不过这个方法有点麻烦(2)直接将现有的数据库文件全部 ...
随机推荐
- C++预处理详解
本文在参考ISO/IEC 14882:2003和cppreference.com的C++ Preprocessor的基础上,对C++预处理做一个全面的总结讲解.如果没有特殊说明,所列内容均依据C++9 ...
- 一条SQL查询MYSQL最大内存用量
// max_mem_usage
- IIS 发布 异常信息 AspNetInitClrHostFailureModule 的解决办法
昨天在一个客户那里使用Server 2008服务器配置IIS,都配置好之后竟然出现了错误信息,以前没有遇到过 "AspNetInitClrHostFailureModule",于是 ...
- MySQL开启general_log跟踪sql执行记录
# 设置general log保存路径 # 注意在Linux中只能设置到 /tmp 或 /var 文件夹下,设置其他路径出错 # 需要root用户才有访问此文件的权限 mysql>set glo ...
- hdu2348题解
又恬不知耻的开始写题解了,暑假到了,QAQ然而想我这样的弱逼是没有暑假的sad,还是老老实实刷题吧. 题目大意:给一个小车的宽度和长度和两条道路的宽度,判断小车能否通过. 思路:可以先看下面的图,我们 ...
- JS this指向问题
<button onclick=(function(){alert(this)})()>I'm button</button>//this指代window <button ...
- WebLogic 12c控制台上传获取webshell
WebLogic 默认端口7001,一般可以通过这样来访问 http://10.9.1.1:7001/console 控制台 通过弱口令weblogic/weblogic登录控制台,下一步获取如何上传 ...
- 对tomcat中使用反射加载类的理解
public void init() throws Exception { initClassLoaders(); //加载一下jar包和类 Thread.currentThread().setCon ...
- 自动化测试工具QTP的使用实例 分类: 软件测试 2015-06-17 00:23 185人阅读 评论(0) 收藏
1. QTP简介 1.1QTP功能与特点 QTP是QuickTest Professional的简称,是一种自动化软件测试工具.在软件的测试过程中,QTP主要来用来通过已有的测试脚本执行重复的手动测试 ...
- redis主从配置
首先安装redis 我的redis安装在/app/redis/文件夹下 第二步,写两个redis实例的配置文件,一主一从.我的设计如下,6379端口为主,6380端口为从. 6379:redis_ma ...