重庆思庄Oracle、Redhat认证学习论坛

标题: PG和ORACLE 对比 [打印本页]

作者: 郑全    时间: 2023-12-13 01:04
标题: PG和ORACLE 对比
1.进程对比
   ORACLE: 监听进程(守护进程),服务进程,后台进程
   PG:       服务进程(POSTGREMASTER))充当监听的职能, 后端进程(和ORACLE的服务进程功能类似),后台进程

作者: 郑全    时间: 2023-12-13 01:08
2.内存组件对比
   oracle: 公共部分:sga(共享池,数据缓冲区,大池,JAVA池等) ,私有部分: pga
   pg:      share buffer cache(没有共享池),WAL , work_mem,维护内存
作者: 郑全    时间: 2023-12-13 12:12
3.DELETE 记录对比

  oracle: delete yourtable_name;delete from yourtable_name;

  pg: delete from yourtable_name; 不能省略 FROM
作者: 郑全    时间: 2023-12-14 10:17
4.过程对比

oracle: 有过程,函数

pg: 没有单独的过程,函数,统一为过程
作者: 郑全    时间: 2023-12-15 10:30
5.与磁盘上文件交互
   oracle: sqlload

    pg: copy to file,copy table from file


作者: 郑全    时间: 2023-12-17 12:11
6.sql执行计划
   oracle: 放置在SHARE POOL,可以复用以前的SQL语句执行计划。

   PG: 没有share pool ,SQL语句执行每次都要重新解析,这个是到目前版本16.1 为止,是这样。
作者: 郑全    时间: 2023-12-17 12:49
7.写磁盘
  ORACLE:肮块先写道 BUFFER_CACHE,然后由DBWR直接写到磁盘,这也是叫DIRECT IO,所以,ORACLE可以把 SGA设置为物理内存的80%,不用考虑给操作系统留更多的缓存。绕过了操作系统缓存,实际效果要比PG好一些。

  PG:          肮块先写道 shared_BUFFER,然后 BGWR进程写到 OS_CACHE, 最后,由操作系统再把OS_CACHE中的数据写到磁盘,也就是说PG是双缓冲区写,平时shared_buffer不能设置太大,一般不超过物理内存的25%.还需要给操作系统内存部分。不知道后面版本会不会修改。
作者: 郑全    时间: 2023-12-17 12:54
8.UPDATE的差异
  ORACLE: 使用UNDO来实现读一致性,要后悔使用UNDO来实现。

  PG: 没有UNDO,UPDATE是直接插入一行,以前那一行不删除,只是给打标志,后面由VACUUM来进行清理,这个也叫MVCC,在PG中,这个MVCC也是容易导致表膨胀,目前OPENGUASS ,修改为 使用UNDO方式来解决 MVCC问题。
作者: 郑全    时间: 2023-12-17 23:36
9.高可用
  ORACLE;RAC,DG

  PG:  流复制 ,类似于ORACLE的dg,无类似RAC的架构。
作者: 郑全    时间: 2023-12-17 23:39
10.备份工具
  ORACLE: 逻辑备份: EXPDP,IMPDP,EXP,IMP
                物理备份:RMAN,手工备份

  PG:         逻辑备份:PG_DUMP,PG_DUMPALL,PG_RESTORE
                物理备份:手工热备份
                                 pg_basebackup
                                 插件:pg_rman

作者: 郑全    时间: 2023-12-18 18:14
11.数据文件存储类型
   ORACLE: 文件系统,ASM,块,裸设备

    PG: 文件系统。不支持其他
作者: 郑全    时间: 2023-12-18 18:15
12.表行物理位置

   ORACLE:ROWID

   PG:CTID

作者: 郑全    时间: 2023-12-20 22:06
13.原生交互命令工具

   ORACLE: sqlplus
                sqlplus user/password@ip:port/service_name

   PG: psql
                psql -h ip -p port -U username -d dbname
作者: 郑全    时间: 2023-12-20 22:11
14.查看参数
    oracle: show parameter para_name   --模糊匹配,输入一部分
               select name,value from v$parameter where name like '%para_name%';   --模糊匹配,输入一部分

    pg:  select name,setting from pg_settings where name like '%para_name%';  模糊匹配,输入一部分
           show max_wal_size;   --参数要输全
作者: 郑全    时间: 2023-12-29 11:03
15.行位置
    ORACLE: ROWID

    PG:CTID


作者: 郑全    时间: 2023-12-29 16:23
16.重建索引
   ORACLE :alter index idx_xxx rebulid;

   PG: REINDEX INDEX idx_xxx;
         REINDEX TABLE my_table;  --重建该表上的所有索引
作者: 郑全    时间: 2023-12-29 17:20
17.事务中是否可以含DDL
    ORACLE:事务中,不能含DDL命令

    PG: 使用中,可以含DDL命令。如下:
           postgres@:5432/postgres-2414#=begin;
BEGIN
postgres@:5432/postgres-2414#=create table xx(id numeric);
CREATE TABLE
postgres@:5432/postgres-2414#=insert into xx values(10);
INSERT 0 1
postgres@:5432/postgres-2414#=\d
                  List of relations
Schema |          Name           | Type  |  Owner   
--------+-------------------------+-------+----------
public | log_student             | table | postgres
public | pg_buffercache          | view  | postgres
public | pg_stat_statements      | view  | postgres
public | pg_stat_statements_info | view  | postgres
public | score                   | table | postgres
public | student                 | table | postgres
public | t                       | table | postgres
public | test                    | table | postgres
public | xx                      | table | postgres
(9 rows)

postgres@:5432/postgres-2414#=rollback;
ROLLBACK
postgres@:5432/postgres-2414#=\d
                  List of relations
Schema |          Name           | Type  |  Owner   
--------+-------------------------+-------+----------
public | log_student             | table | postgres
public | pg_buffercache          | view  | postgres
public | pg_stat_statements      | view  | postgres
public | pg_stat_statements_info | view  | postgres
public | score                   | table | postgres
public | student                 | table | postgres
public | t                       | table | postgres
public | test                    | table | postgres
(8 rows)

作者: 郑全    时间: 2023-12-29 18:08
18.表不存在,是否可以创建过程

    ORACLE: 不能

    PG: 可以
作者: 郑全    时间: 2023-12-30 11:21
19.SQL 组合
   ORACLE: UNION,UNION ALL,INTERSECT,MINUS

   PG: UNION,UNION ALL,
         INTERSECT,INTERSECT ALL
         EXCEPT,EXCEPT ALL

        PG没有MINUS
         
作者: 郑全    时间: 2023-12-31 10:07
20.修改参数

   ORACLE:修改PFILE,或者SPFILE
                  PFILE通过操作系统方式修改,重启生效
                  SPPFILE是二进制的,从9I开始提供,可以通过ALTER SYSTEM 方式修改,部分参数,可以立即生效。

  PG: 修改POSTGRESQL.CONF,或者POSTGRESQL.AUTO.CONF
          在 PG9.4以前,只能手工修改 postgresql.conf 文件,在9.4提供了ALTER SYSTEM SET 方式修改POSTGRESQL.AUTO.CONF 文件,能生效的参数,可以通过pg_ctl reload 方式生效,否则,需要重启PG才能生效。

作者: 郑全    时间: 2024-1-1 13:20
21.优化连接
    ORACLE: NESTED LOOP,HASH JOIN ,MERGE JOIN,CROSS JOIN

    PG: NESTED LOOP,HASH JOIN ,MERGE JOIN
          没有 CROSS JOIN
作者: 郑全    时间: 2024-1-1 15:59
22.在同一字段上能否创建多个索引

    ORACLE:不能

    PG : 可以创建多个不同的索引,而且多个可以有用
            postgres@:5432/postgres-95655#=create index idx_test on test(id);
CREATE INDEX
postgres@:5432/postgres-95655#=create index idx_test1 on test(id);
CREATE INDEX
postgres@:5432/postgres-95655#=create index idx_test2 on test(id);
CREATE INDEX
postgres@:5432/postgres-95655#=\d test
                Table "public.test"
Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
id     | integer |           |          |
v      | integer |           |          |
Indexes:
    "idx_test" btree (id)
    "idx_test1" btree (id)
    "idx_test2" btree (id)




欢迎光临 重庆思庄Oracle、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2