这是杂货铺的第463篇文章 曾经测试过Oracle 11g下count(*)、count(1)、count(主键列)和count(包含空值的列)这几种操作,究竟有何区别,结论如下, 11g下,通过实验结论 ,说明了count(1)和count(主键索引字段)其实都是执行的count(*),而且会选择索引的FFS扫描方式,count(包含空值的列)这种方式一方面会使用全表扫描,另一方面不会统计空值,因此有可能和业务上的需求就会有冲突 前几天,碰巧看见PostgreSQL中文社区发的一篇文章,关于在PG中count(1)和count(*)的效率问题,从结论看,和Oracle很像,但是他是从开源code,探究的整个过程,能够更准确地了解背后的原理 可见,Oracle和PG对于一些操作,其实存在相同之处的,谈不上谁借鉴,可能更多地还是针对场景,为了满足业务以及性能方面的需求,提供的合理逻辑。 其实我想说的是,无论是从10046,还是从PG的源码,我们应该看得深入一些,从原理设计层面,站在架构师、开发人员的视角,了解这个功能,设计的初衷,这才有助于我们借鉴好的设计,学以致用,丰富我们的经验,实现自我提高
Oracle和PG中ROLLBACK和COMMIT、SAVEPOINT的语义相同。Oracle的隔离级别,PostgreSQL中也有。大多数情况下PG的隔离级别(读已提交)就已满足需求。 Oracle的FLOAT在PG中是REAL,DOUBLE是DOUBLE PRECISION。 Date and Time Oracle中的DATE包含data和time。 Oracle的TIMESTAMP和PG类似。 Oracle只有INTERVAL YEAR TO MONTH and INTERVAL DAY TO SECOND,因此PG可以直接使用。 基于触发器的数据库同步方法和并行双向同步方式可帮助轻松地管理数据。 ESF Database Migration Toolkit:直连Oracle和PG,迁移表结构、数据、索引、主键、外键、内容等。 连接Oracle,提取结构,产生SQL语句然后加载到PG。 Oracle to postgres:不使用ODBC和其他中间件。转换表结构、数据、索引、主键和外键。
代金券、腾讯视频VIP、QQ音乐VIP、QB、公仔等奖励等你来拿!
Oracle中的date类型也和PostgreSQL不同,Oracle中可以精确到时分秒,而在PostgreSQL中只有年月日。 存储过程中的输入、输出参数,Oracle支持IN、OUT和INOUT三种类型,但PostgreSQL不支持OUT,TDSQL PG版对此做了兼容,完整支持IN、OUT和INOUT三种类型。 中常用的语法和函数,TDSQL PG版都可以兼容。 3.7 ROWID & ROWNUM ROWID和ROWNUM都是Oracle特有的语法,PostgreSQL并不支持,TDSQL PG版对此进行兼容改造,支持ROWID和ROWNUM。 4.6 双轨运行方案 下图是我们的双轨运行方案,图中有两个架构,分别是Oracle To TDSQL PG版和TDSQL PG To Oracle。
为什么会提出这样一个话题, 1 使用PG 前,提出问题的人使用的或管理的数据库已经深入骨髓,很愿意用原来的管理方法来管理新的数据库,这是很正常的事情,我们都愿意用已有的经验去套用在新的事务上,加快对新事物的理解和使用 说到这里问题是PG 怎么办,PG 中的SCHEMA 和 ORACLE 概念无差, 而不幸的是,他的DATABASE 的概念也和 MYSQL 无差。貌似 PG 属于脚踩两只船的那位。 如果我们以ORACLE的方式管理 PG ,在一个DATABASE 里面创建多个SCHEMA ,也就是放弃PG 的多DATABASES 的概念,仅仅使用一个数据库,我们会遇到另一个问题,autovacuum 所以我暂时只能理解,如果你想用ORACLE的方式来管理PG 的数据库,则最好表不要特别大,并且数量也不要太多。 那我们对上面的问题既然有了一定的认知,我们就能避开某些可能会出现问题的地方,例如,我可以使用ORACLE的方式来管理PG ,建立多个SCHEMA, 但如果一组表与另一组都是无关联的, 那我就在PG的CLUSTER
从职业本身和数据库市场来说,数据库的在中国的演变也是一个线性的过程,而线性的过程中,ORACLE 和SQL SERVER 伴随着大部分的企业,包括银行,电力,电信等行业, 而之前去掉 ORACLE 和 所以PG 作为传统RDBS系统, 替换传统的ORACLE ,SQL SERVER 优势是明显的, 开发人员的思路也不需要变化,至少那些开发人员用惯的存储过程还能存活,甚至PG 支持多种语言的存储过程,而不是和某些数据库如果更换 并发select ,JOIN的方式与商业数据库齐平, 多种的物理,逻辑数据复制,物化视图, 多种索引方式的形成和使用,等等,基本上如果拿PG 当商业数据库去销售,没有任何的难度,并且也与ORACLE , 也都在购买这些厂家的产品和服务. 7 人员储备的问题,诚然这个是一个攻击点, MYSQL ,或者ORACLE ,SQL SERVER 的从业者数量较多,比较方便就能找到相关从业者入职, PG的人员招聘是有难度的 因为如果数据库的选择用英语时态来看 SQL SERVER 和 ORACLE 属于过去式, MYSQL 属于现在完成时, PG ,MONGODB 属于现在将来进行时.
据我所知,在oracle里索引是不存储null值的,所以is null走不了索引,在pg里is null可以走索引,说明null值在索引里面也进行了存储。下面分别对pg和oracle进行测试验证。 在pg和oracle中分别创建test表,初始化数据 test=# create table test(c1 int,c2 int default null); CREATE TABLE test=# test=# create index on test(c2); CREATE INDEX test=# analyze test; ANALYZE oracle SQL> create index 从上面执行计划对比可以看到pg走了索引,oracle没走索引,因此也验证了pg的btree索引是可以存储空值的。笔者也验证过mysql的btree索引也是存储空值的。 其实我个人觉得不应该存储,oracle里索引不存储null值应该也是经过考虑后做的优化。
一、项目目标 1、使用ora2pg迁移Oracle 19.3数据到PG13.2 使用swingbench压测生成oracle数据 部署ora2pg工具,实现Oracle数据迁移到PG数据库 2、配置OGG 它连接到 Oracle或MySQL 数据库,自动扫描并抽取其结构和数据,然后生成用于实现迁移的SQL 脚本,利用该脚本可以将数据库结构和数据加载到 PostgreSQL 数据库中。 BLOB object as PG BYTEA. - Export Oracle views as PG tables. - Export Oracle user defined types. - Provide --forceowner : 导入数据时,强制 ora2pg 将导入 PostgreSQL 的表和序列的拥有者设置为连接 Oracle 数据库时的用户。 注意:若去掉PG_DSN、PG_USER和PG_PWD参数的注释,则会将数据直接导入到PG中,而不会导出到中间文件。
6 PG 对于 ORACLE 和 MYSQL 在进程方面,被KILL 后,只有PG还可以继续工作,其他的数据库已经挂了 7 PG 使用的通道加密与ORACLE 类似,在安全方面基本上与ORACLE 8 ORACLE 有的 PG 有,PG 有的 ORACLE 没有, 1 索引类型 ,PG 要比ORACLE 强,每种索引的类型都是有实际的作用的,不是摆设。 9 PostGIS 已经有20年,比某些开源数据库刚有,是碾压性的 10 PG 有分布式,ORACLE 没有 11 PG 支持 OLTP 和 OLAP ,在不行可以可以使用 greenplum , 在不行就考虑 这些数据库的老油条,估计是放过了他没说他什么,换我直接给他几句 1 那个REDIS 是在项目中单独使用的,你不得和一个其他的 ORACLE ,SQL SERVER ,MYSQL ,PG 来搭配吗,你就是一个配角 最后是PG,PG 是真有胆,别人都避讳,甚至mysql直接祭出,我们是小ORACLE ,PG 的老大爷直接一句,灭了ORACLE 一家全族,我们PG 比ORACLE 的性能,稳定性,功能,都要高。
7月16日晚20:30-21:30,云和恩墨大讲堂邀请到了云和恩墨东区技术顾问成旸老师为我们分享Oracle中统计信息的相关知识。成老师将带我们由点到面,系统地了解统计信息。 和Oracle来比较学习它的体系结构,比较容易理解。 @cs-db /oracle/soft/data/log 16:12 --> pwd /oracle/soft/data/log < pg@cs-db /oracle/soft/data/log 16: 的主要参数文件,有很详细的说明和注释,和Oracle的pfile,MySQL的my.cnf类似。 controlfile是很重要的文件,数据库部署和调整。 五、数据文件 ---- 5.1 page pg中,每个索引和表都是一个单独的文件,pg中叫做page。
一、引言 ---- PostgreSQL是最像Oracle的开源数据库,我们可以拿MySQL和Oracle来比较学习它的体系结构,比较容易理解。 @cs-db /oracle/soft/data/log 16:12 --> pwd /oracle/soft/data/log < pg@cs-db /oracle/soft/data/log 16 :08 postgresql-16.log -rw------- 1 pg pg 502 Nov 10 16:08 postgresql-16.csv < pg@cs-db /oracle/soft 的主要参数文件,有很详细的说明和注释,和Oracle的pfile,MySQL的my.cnf类似。 controlfile是很重要的文件,数据库部署和调整。 五、数据文件 ---- 5.1 page pg中,每个索引和表都是一个单独的文件,pg中叫做page。
硬可的"ORACLE" 时至今日,ORACLE 依然是数据库业界最大的软件提供商, ORACLE 依然在不少的公司处理事务化的任务,以及商业分析,和商业智能方面的支持工作. PG 在1996年在开源世界开始有了自己的"声音",当然这是在他完全支持SQL 语言以后的事情. 并且支持所有的RDBMS的特性,如视图,存储过程,索引和触发器等, 除此以外,主键和外键和原子性. POSTGRESQL 本身在功能上也是可以和ORACLE正面刚,PG提供的隔离级别,中包含 RC RR SERIALIZABLE 都是齐全的,对于脏读是天生免疫的, 并且PG是支持完全的序列化,以及SNAPSHOT 来说PG 是一个更轻的, 对于使用的成本来说, POSTGRESQL 是完全能HOLD住与ORACLE 同等数据存储. 5 Compatibility – PostgreSQL Oracle has ORACLE 有一个强有力的PL/SQL的语言系统,PG除了有自己的语言系统同时也支持多种语言(python ,R 等语言的支持).
2、导出用户和组的授权/权限。 3、导出筛选的表(通过制定表明)。 4、导出Oracle模式到一个PostgreSQL(7.3以后)模式中。 5、导出预定义函数、触发器、程序、包和包体。 6、导出范围和列表分区。 7、导出所有的数据或跟随一个WHERE子句。 8、充分支持Oracle BLOB对象作为PG的BYTEA。 9、导出Oracle视图作为PG表。 grant 提取在所有对象中转换为pg组、用户和权限的用户。 sequence 提取所有的序列以及上一个位置。 tablespace 提取表空间。 trigger 提取通过动作触发的被指定的触发器。 --forceowner : 导入数据时,强制 ora2pg 将导入 PostgreSQL 的表和序列的拥有者设置为连接 Oracle 数据库时的用户。 默认情况下,对象的拥有者为连接 Pg 数据库的用户。 --nls_lang code: 设置 Oracle 客户端的 NLS_LANG 编码。
前几年,Oracle收购了MySQL,导致MySQL的出现两个版本:商业版和社区版。对于后者,由于Oracle控制了MySQL的开发,受到了广大使用者的批评。 1、为什么使用PG PG作为开源、功能丰富的数据库,可与Oracle展开竞争。开发者也会将PG当做NoSQL数据库来使用。在云中和本地部署使用PG非常简单,也可以在docker容器等各个平台使用。 PG也是一个非常好的数据仓库,用于大数据上运行复杂的报告查询。 2、为什么使用MySQL MySQL具有社区版和商业版。商业版由Oracle管理。作为关系型数据库,部署和使用非常简单。 PG也可以使用Oracle的SQL Developer、pgAdmin、omnidb、dbeaver。监控工具有Nagios, Zabbix, and Cacti。 MySQL表示RDBMS和ORDBMS应用的最佳选择。因为自从Oracle收购MySQL依赖,MySQL的采用率明显下降,开源领域的开发进度也受到冲击,招致MySQL用户的批评。
设计与实现》、《PostgreSQL修炼之道:从小工到专家》、《SQL优化最佳实践:构建高效率Oracle数据库的方法与技巧》、《Oracle Exadata专家手册》、《 PostgreSQL实战》, 微软的Azure和Google云平台在PG公有云用户中的使用率不分伯仲,均为17.5%。剩余的10%包括DigitalOcean、IBM Cloud、Rackspace和阿里巴巴。 ? 在本次受访者中,PG当然是以85.9%的使用比例高居榜首(包括当前在使用的以及正在迁移的),接下来是ORACLE占比43.59%,SQL Server占比32.05%,MySQL占比28.21%,MongoDB 超过四分之一(27.3%)的PG用户除使用PG外,还使用Oracle,其次是SQL Server 20.9%, MySQL 17.3%, MongoDB 10.0%, DB2 9.1%, Redis 7.3% PG数据库组合:SQL vs NoSQL 考虑到与PG结合使用的数据库种类繁多,我们将与PG结合使用的数据库的使用趋势分为俩类:SQL和NoSQL。
四、PG 的“无锁定”特性非常突出,甚至包括 vacuum 这样的整理数据空间的操作,这个和PGSQL的MVCC实现有关系。 五、PG 的可以使用函数和条件索引,这使得PG数据库的调优非常灵活,mysql就没有这个功能,条件索引在web应用中很重要。 六、PG有极其强悍的 SQL 编程能力(9.x 图灵完备,支持递归!) ,有非常丰富的统计函数和统计语法支持,比如分析函数(ORACLE的叫法,PG里叫window函数),还可以用多种语言来写存储过程,对于R的支持也很好。 七、PG 的有多种集群架构可以选择,plproxy 可以支持语句级的镜像或分片,slony 可以进行字段级的同步设置,standby 可以构建WAL文件级或流式的读写分离集群,同步频率和集群策略调整方便 另外多线程架构和多进程架构之间没有绝对的好坏,oracle在unix上是多进程架构,在windows上是多线程架构。 很多pg应用也是24/7的应用,比如skype.
前三名中,只有 Oracle 的增幅最为显著,而且同比尤其抢眼: ? Oracle 的增长相信是受益于 Oracle 新的版本策略和发布计划。 Oracle 新版本的发布,相信会引发一轮用户讨论和采用的浪潮。 ? 在前10名中,最为抢眼的是 PostgreSQL 的表现,本月获得 11.69 分的增幅,同比持续增长,从 PG 的曲线上看,其上升的势头从未放缓。 PostgreSQL 10.0 在2017年10月发布之后,持续引起社区的热议,其增强的逻辑复制、表分区、并行查询 和 优选提交(Quorum Commit) 等功能,使得 PG 更加贴近企业级应用实践 我们分析了一下趋势,自从 PG 10 发布以来,其流行度分值从 373 上升到 417 ,增幅为 12%,这是极为难得的。
PG 1 实例 PG只支持预定义异常的处理,即异常code都是定义好的,触发后走EXCEPTION部分代码逻辑。 Oracle oracle支持三种异常形式: https://docs.oracle.com/cd/E11882_01/timesten.112/e21639/exceptions.htm#TTPLS195 第一种Predefined TimesTen error是和PG概念相同的。 后两种需要PG代码改造实现。 The command succeeded. 3 非预定义异常处理 出现一个异常后,将异常CODE和自定义异常名字关联起来,触发后直接进入定义好的处理逻辑。
作为ORACLE SQL SERVER 这样的数据库显然正在 从主流 走向 非主流, 而 MYSQL PG MONGO ,这些数据库也正在从 非主流,走向主流。 12年前的软件开发模式和 12年后的软件开发模式也是天翻地覆的改变,python , go, node.js , 各种开发语言的转变,数据也从结构化 往 无结构化进行转变和迁移,一些都更变得适应现在多变的模式和善变的数据 当然PostgreSQL 的出现能不能打破某些平衡,让ORACLE 失掉更多的江山,目前看是有这个趋势的, PG 在处理复杂SQL 的能力 以及处理 JSON 的能力,复制的能力,开源的能力,都不比MYSQL 差,甚至和ORACLE 是在一个级别或更高,有个大佬,说过 PG 垃圾,或者 搞了 10多年了,还是那个吊样。 MONGO ,有可能是PG,或者 国产国际化的数据库(TIDB),因为选择变多了,业务区分的更细致,软件模块化,微服化,也导致了,集中式的设计越来越不被主流化,而和那样设计相匹配的 ORACLE 也算是那个时代设计的产物和标志
TDSQL PostgreSQL版是腾讯自主研发的分布式数据库系统。集高扩展性、高SQL兼容度、完整的分布式事务支持、多级容灾能力以及多维度资源隔离等能力于一身。采用no sharding 的集群架构,提供容灾、备份、恢复的能力。并完整兼容PostgreSQL与Oracle数据库。
扫码关注云+社区
领取腾讯云代金券