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)直接将现有的数据库文件全部 ...
随机推荐
- 【海洋女神原创】知识普及:IS版本命名规则和高低关系
经常有朋友对IS的版本命名不甚了解,有时候在交流的时候就会造成误会,在这里做一下普及. IS最早出名的版本是IS6.22,这是个非常古老的版本的,但是在IS历史上有不可磨灭的贡献. 之后很长一段时间内 ...
- Ported my old SPH solver in Unity
Here is the link to the web player version, http://www-scf.usc.edu/~taian/pages/sph/builds/12212014/ ...
- Norm and Sparse Representation
因为整理的时候用的是word, 所以就直接传pdf了. 1.关于范数和矩阵求导.pdf 参考的主要是网上的几个博文. 2.稀疏表示的简单整理.pdf 参考论文为: A Survey of Sparse ...
- SQL --Chapter 04 数据更新
数据的插入(INSERT语句的使用方法) INSERT INTO ShohinIns (shohin_id, shohin_mei, shohin_bunrui, hanbai_tanka, 原则上, ...
- 创建html模板
打开写好的html 复制 在页面上右击------属性 --会出现下面情况
- Swift—继承
一个类可以继承另一个类的方法,属性和其他特性.当一个类继承其他类时,继承类叫子类,被继承类叫超类(或父类).在Swift中,继承具有单继承的特点,每个子类只有一个直接父类,继承是区分类与其他类型的一个 ...
- 99乘法表(bash)
awk方式: # awk 'BEGIN{for(i=1;i<=9;i++){for(j=1;j<=i;j++){printf j"x"i"="i*j ...
- job history 的查看
linux shell 可以启动 mapred historyserver 然后根据显示的端口hostname+port进行访问(一般默认端口是19888)
- 单例模式读取properties配置文件中的信息
public class ConfigManager { private static ConfigManager config = null; //创建Properties文件 读取配 ...
- 解决Type 'UnityEngine.Component' does not support slicing
unity从4.x升级到5.x后部分脚本的编译错误 将animation改成GetComponent.<Animation>()