将MySQL数据库移植为PostgreSQL
在北美,人们对于 PostgreSQL 的热情不断升温。随着 PostgreSQL 的发展, PostgreSQL 8.x 已经从技术上超越 MySQL 5.x ,而市场的超越相信只是时间问题。而最终,用户也许有机会享受到可媲美 Oracle 的开源数据库也未尝没有可能。
我供职的互联网公司,服务约 50 万商务用户,经过多次的升级移植,目前公司已经全部将后台数据库从 MySQL 移植到 PostgreSQL ,而个人完成了其中一半的数据库移植工作,所以对数据库从 MySQL 移植到 PostgreSQL 积累了一些经验。在此整理成文,希望能对大家使用 PostgreSQL 有一些启发。
1) 准备: 使用 MySQL 数据备份工具对数据库进行全备份:
mysqldump -h [hostname] -u [username] -p [password] --extended-insert=false [dbname] > mysql-db.sql
注意 disable extended-insert , PostgreSQL 不支持 MySQL 的 extended-insert
2) 转化: 将 mysql-db.sql 转为 PostgreSQL 可以导入的 SQL Script.
MySQL 和 PostgreSQL 在 SQL 语义上存在一定差异,比如 MySQL 不支持 sequence ,触发器等功能,但为此又提供了一些自有的语法规则,而对比一些系统函数, MySQL 和 PostgreSQL 又存在比较大的差别。为此,我编写了一段语义分析和转化的程序 mysql2psql
>mysql2psql mysql-db.sql postgres-db.sql
3) 导入: 使用 PostgreSQL 提供的 pgAdmin 将数据文件导入数据库。
4) SQL 语句的修改: 在实际的应用中,前端的系统往往会嵌入一些具有数据库特性的 SQL 语句,而随着后台数据库的改变,前端的系统程序也同样需要做出相应的修改。
MySQL 和 PostgreSQL 最常见的不同之处包括:Group by,Join的使用差异,系统函数的命名和调用的差异等等。
相关推荐
-
PostgreSQL 创建表分区
创建表分区步骤如下: 1. 创建主表 CREATE TABLE users ( uid int not null primary key, name varchar(20)); 2. 创建分区表(必须继承上面的主表) CREATE TABLE users_0 ( check (uid >= 0 and uid< 100) ) INHERITS (users); CREATE TABLE users_1 ( check (uid >= 100)) INHERITS (users); 3.
-
PostgreSQL ERROR: invalid escape string 解决办法
今天有同事在配置PostgreSQL为Hive元数据库后,运行Hive SQL时遇到以下报错信息: 复制代码 代码如下: Caused by: MetaException(message:Got exception: org.apache.hadoop.hive.metastore.api.MetaException javax.jdo.JDODataStoreException: Error executing JDOQL query "SELECT "THIS".&quo
-
Windows PostgreSQL 安装图文教程
它提供了多版本并行控制,支持几乎所有 SQL 构件(包括子查询,事务和用户定义类型和函数), 并且可以获得非常广阔范围的(开发)语言绑定 (包括 C,C++,Java,perl,tcl,和 python).本文介绍的是其在windows系统下的安装过程. 一般说来,一个现代的与 Unix 兼容的平台应该就能运行 PostgreSQL.而如果在windows系统下安装,你需要 Cygwin 和cygipc 包.另外,如果要制作服务器端编程语言 PL/Perl,则还需要完整的Perl安装,包括 li
-
PostgreSQL 安装和简单使用第1/2页
据我了解国内四大国产数据库,其中三个都是基于PostgreSQL开发的.并且,因为许可证的灵活,任何人都可以以任何目的免费使用,修改,和分发 PostgreSQL,不管是私用,商用,还是学术研究使用.本文只是简单介绍一下postgresql的安装和简单的使用,语法方面涉及的比较少,以方便新手上路为目的. 1.系统环境和安装方法 : PostgreSQL的安装方法比较灵活,可以用源码包安装,也可以用您使用的发行版所带的软件包来安装,还可以采用在线安装-- 1.1 系统环境:Ubuntu Linux
-
C#访问PostGreSQL数据库的方法
我对PostGreSQL只是一知半解,记录这个过程是希望如果以后微软技术方向的人遇到类似的需求,可以有个比较直接的的参考.在不熟悉的知识领域里,总是有搜索引擎可以帮到我. 初步了解PostGreSQL数据库及数据形态 首先我想看看PostGreSQL的数据库以及我想要获取的数据形态是什么样子的,Linux和PostGreSQL这两个关键字我都不熟悉,搜了一下找到了一个可以连通PostGreSQL数据库的Windows客户端,叫pgAdmin,我装的是III版本,应该是比较新的,下载安装后看到界面
-
SQL Server数据迁移至PostgreSQL出错的解释以及解决方案
问题重现: 1.PG客户端: postgres=# create table text_test (id int,info text); CREATE TABLE postgres=# insert into text_test values (1,E'\0x00'); ERROR: invalid byte sequence for encoding "UTF8": 0x00 2.SQL Server产生数据 create table test_varchar(id int,name
-
PostgreSQL中的OID和XID 说明
oid: 行的对象标识符(对象 ID).这个字段只有在创建表的时候使用了 WITH OIDS ,或者是设置了default_with_oids 配置参数时出现. 这个字段的类型是 oid (和字段同名). 例子: 复制代码 代码如下: CREATE TABLE pg_language ( lanname name NOT NULL, lanowner oid NOT NULL, lanispl boolean NOT NULL, lanpltrusted boolean NOT NULL, la
-
将MySQL数据库移植为PostgreSQL
在北美,人们对于 PostgreSQL 的热情不断升温.随着 PostgreSQL 的发展, PostgreSQL 8.x 已经从技术上超越 MySQL 5.x ,而市场的超越相信只是时间问题.而最终,用户也许有机会享受到可媲美 Oracle 的开源数据库也未尝没有可能. 我供职的互联网公司,服务约 50 万商务用户,经过多次的升级移植,目前公司已经全部将后台数据库从 MySQL 移植到 PostgreSQL ,而个人完成了其中一半的数据库移植工作,所以对数据库从 MySQL 移植到 Postg
-
docker环境下数据库的备份(postgresql, mysql) 实例代码
posgresql 备份/恢复 1.备份 DATE=`date +%Y%m%d-%H%M` BACK_DATA=xxapp-data-${DATE}.out # 这里设置备份文件的名字, 加入日期是为了防止重复 docker exec pg-db pg_dumpall -U postgres > ${BACK_DATA} # pg-db 是数据库的 docker 名称 2.恢复 docker cp ${BACK_DATA} pg-db:/tmp docker exec pg-db psql -U
-
springboot使用spring-data-jpa操作MySQL数据库
我们在上一篇搭建了一个简单的springboot应用,这一篇将介绍使用spring-data-jpa操作数据库. 新建一个MySQL数据库,这里数据库名为springboot,建立user_info数据表,作为我们示例操作的表对象. user_info信息如下: DROP TABLE IF EXISTS `user_info`; CREATE TABLE `user_info` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(
-
教你怎么用Python操作MySql数据库
一.关于Python操作数据库的概述 Python所有的数据库接口程序都在一定程度上遵守 Python DB-API 规范. DB-API定义了一系列必须的对象和数据库存取方式,以便为各种底层数据库系统和多种多样的数据库接口程序提供一致的访问接口.由于DB-API 为不同的数据库提供了一致的访问接口, 在不同的数据库之间移植代码成为一件轻松的事情. 在Python中如果要连接数据库,不管是MySQL.SQL Server.PostgreSQL亦或是SQLite,使用时都是采用游标的方式. 二.一
-
mysql数据库迁移至Oracle数据库
本文实例为大家分享了java获取不同路径的方法,供大家参考,具体内容如下 1.使用工具: (1) Navicat Premium (2) PL/SQL Developer 11.0 (3) Oracle SQL Developer 4.0.0.12.84(点击可进入下载页面) 特别说明:最初我用的一直是高版本的SQL Developer,但在数据库移植到大概两分钟的时候,总是报错,而错误信息又不明确.最后换成 Oracle SQL Developer 4.0.0.12.84,才把问题解决掉!如果
-
Python连接mysql数据库的正确姿势
Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: GadFly mSQL MySQL PostgreSQL Microsoft SQL Server 2000 Informix Interbase Oracle Sybase 不同的数据库你需要下载不同的DB API模块,例如你需要访问Oracle数据库和Mysql数据,你需要下载Oracle和MySQL数据库模块. DB-API 是一个规范. 它定义了一系列必须的对象和数据库存取方式, 以便为各种各样的底层数据库系统和
-
MySQL数据库使用mysqldump导出数据详解
mysqldump是mysql用于转存储数据库的客户端程序.它主要产生一系列的SQL语句,可以封装到文件,该文件包含有所有重建您的数据库所需要的 SQL命令如CREATE DATABASE,CREATE TABLE,INSERT等等.可以用来实现轻量级的快速迁移或恢复数据库.是mysql数据库实现逻辑备份的一种方式. 在日常维护工作当中经常会需要对数据进行导出操作,而mysqldump是导出数据过程中使用非常频繁的一个工具:它自带的功能参数非常多,文章中会列举出一些常用的操作,在文章末尾会将所有
-
Mysql 数据库常用备份方法和注意事项
Mysql数据库备份的常用3种方法: 1.直接拷贝(cp.tar,gzip,cpio) 2.mysqldump 3.mysqlhotcopy 1.使用直接拷贝数据库备份 典型的如cp.tar或cpio实用程序. 当你使用直接备份方法时,必须保证表不在被使用.如果服务器在你正在拷贝一个表时改变它,拷贝就失去意义. 保证你的拷贝完整性的最好方法是关闭服务器,拷贝文件,然后重启服务器.如果你不想关闭服务器,要在执行表检查的同时锁定服务器.如果服务器在运行,相同的制约也适用于拷贝文件,而且你应该使用相同
-
在MySQL数据库中使用C执行SQL语句的方法
他们将讨论返回数据的语句,例如INSERT以及不返回数据的语句,例如UPDATE和DELETE.然后,他们将编写从数据库检索数据的简单程序 执行SQL语句 现在,我们已经有了一个连接,并且知道如何处理错误,是时候讨论使用我们的数据库来作一些实际工作了.执行所有类型的SQL的主关键字是mysql_query: int mysql_query(MYSQL *connection, const char *query) 正如您所见,它非常简单.它取一个指向连接结构的指针和包含要执行的SQL的文本字符串
-
shell脚本连接、读写、操作mysql数据库实例
本文介绍了如何在shell中读写mysql数据库.主要介绍了如何在shell 中连接mysql数据库,如何在shell中创建数据库,创建表,插入csv文件,读取mysql数据库,导出mysql数据库为xml或html文件, 并分析了核心语句.本文介绍的方法适用于PostgreSQL ,相对mysql而言,shell 中读写PostgreSQL会更简单些. 1. 连接mysql 数据库 shell中连接数据库的方法很简单,只需要指定用户名,密码,连接的数据库名称,然后通过重定向,输入mysql的语
随机推荐
- 使用批处理实现启动和停止服务的代码分析(net start&net stop)
- Css3制作变形与动画效果
- VBS教程:函数-LoadPicture 函数
- git自定义_动力节点Java学院整理
- Java 装箱与拆箱详解及实例代码
- Java编程实现非对称加密的方法详解
- 浅谈PHP中关于foreach使用引用变量的坑
- python获取当前时间对应unix时间戳的方法
- Python3通过Luhn算法快速验证信用卡卡号的方法
- HDOJ 1443 约瑟夫环的最新应用分析详解
- C语言数据结构 link 链表反转的实现
- IFrame跨域高度自适应实现代码
- PHP中的float类型使用说明
- react-native ListView下拉刷新上拉加载实现代码
- jQuery+css3实现文字跟随鼠标的上下抖动
- javascript判断数组内是否重复的方法
- jQuery验证插件validate使用方法详解
- jQuery动态产生select option下拉列表
- jQuery过滤特殊字符及JS字符串转为数字
- js轮播图代码分享