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

标题: PGCA-090考试题解 [打印本页]

作者: 郑全    时间: 2024-11-30 16:44
标题: PGCA-090考试题解
本帖最后由 郑全 于 2024-12-4 13:17 编辑

一、单选题
1. 安装PostgresSQL会用到数据库中的压缩功能,这个功能需要第三方的压缩开发包支持,这个开发包是下面哪一个?
    A.openldap
    B.zlib
    C.readline
    D.gcc
    答案:B

    解析:
           这个主要是源码安装中需要用到的依赖包,具体可以参见官方文档:Chapter 17. Installation from Source Code。
           OpenLDAP ,是集中认证服务
            zlib,压缩库,用于pg_dumppg_restore
            readline,PSQL命令行上下左右,编辑以前的命令的功能。
            gcc,就是C编译器




作者: 郑全    时间: 2024-11-30 16:46
2.如果想要方便地在psql中使用上下键翻查历史命令,需要安装什么开发包?
    A.openldap
    B.zlib
    C.readline
    D.gcc
    答案:C
     解析:
           这个主要是源码安装中需要用到的依赖包,具体可以参见官方文档:Chapter 17. Installation from Source Code。
           OpenLDAP ,是集中认证服务
            zlib,压缩库,用于pg_dump 和 pg_restore
            readline,PSQL命令行上下左右,编辑以前的命令的功能。
            gcc,就是C编译器
   
作者: 郑全    时间: 2024-11-30 16:52
3.在Linux中,设置环境变量PATH和LD_LIBRARY_PATH时,如果想对所有用户生效,需要将配置信息写到哪个文件中?
  A./etc/profile
  B..bashrc
  C..bash_profile
  D..profile
  答案:A

   解析:
    /etc/profile用于整个系统的所有用户都会执行。
    其他几项,都只是某个用户下的环境变量。
    可以参见 17.5.2. Environment Variables

作者: 郑全    时间: 2024-11-30 17:04
4.在Linux中,设置环境变量PATH和LD_LIBRARY_PATH时,如果想对当前普通用户生效,建议将配置信息写到哪个文件中?
  A./etc/profile
  B..bashrc
  C..bash_profile
  D..profile
  答案:B

   解析:
    /etc/profile 是所有用户都会执行的,不适合普通用户特殊需求
    .bash_profile,.profile 执行前,都会调用 .bashrc,所以,普通用户的环境变量放这里比较好。所以,选择B
   
   
作者: 郑全    时间: 2024-11-30 17:13
本帖最后由 郑全 于 2024-11-30 17:14 编辑

5.关闭数据库时,使用pg_ctl -m参数指定数据库的关闭方式,比较常用的关闭方式是哪种?
A.smart        
B.fast
C.immediate        
D.abort
答案:B

解析:
  pg_ctl stop关闭数据库时,可以通过“-m”参数定义关闭方式
  smart:等待所有客户端断开 ,对应ORACLE的normal 方式。
  fast:   缺省模式,强制模式,对未断开的客户端进行回滚,对应ORACLE 的immediate;
  immediate:强制模式,但不回滚,重启时需要自动恢复 ,对应ORACLE的abort  abort: pg没有这种名字的关闭模式。
  所以,SMART一般关不了,IMMEDIATE又太暴力,重启需要恢复,所以,一般使用 FAST,而且是默认的模式。


作者: 郑全    时间: 2024-11-30 17:23
6.SQL命令一般分为DQL、DDL、DML几类,SELECT查询属于哪一类?
A.DQL       
B.DML       
C.DDL       
D.DCL
答案:A

  解析:
   DQL:数据查询语言,比如SELECT,就是这种
   DML:数据操作语言,比如INSERT,UPDATE,DELETE
   DDL:  数据定义语言,比如创建表,修改表结构等。
   DCL:数据控制语言,比如COMMIT,ROLLBACK,SAVE POINT.
   
作者: 郑全    时间: 2024-11-30 17:24
7.SQL命令一般分为DQL、DDL、DML几类,INSERT、UPDATE、DELETE属于哪一类?
A.DQL      
B.DML      
C.DDL      
D.DCL
答案:B

解析:
   DQL:数据查询语言,比如SELECT,就是这种
   DML:数据操作语言,比如INSERT,UPDATE,DELETE
   DDL:  数据定义语言,比如创建表,修改表结构等。
   DCL:数据控制语言,比如COMMIT,ROLLBACK,SAVE POINT.
  
作者: 郑全    时间: 2024-11-30 17:24
8.SQL命令一般分为DQL、DDL、DML几类,CREATE TABLE属于哪一类?
A.DQL      
B.DML      
C.DDL      
D.DCL
答案:C

解析:
   DQL:数据查询语言,比如SELECT,就是这种
   DML:数据操作语言,比如INSERT,UPDATE,DELETE
   DDL:  数据定义语言,比如创建表,修改表结构等。
   DCL:数据控制语言,比如COMMIT,ROLLBACK,SAVE POINT.
作者: 郑全    时间: 2024-11-30 17:26
9.SQL命令一般分为DQL、DDL、DML几类,INSERT INTO … SELECT属于哪一类?
A.DQL      
B.DML      
C.DDL      
D.DCL
答案:B

解析:
   DQL:数据查询语言,比如SELECT,就是这种
   DML:数据操作语言,比如INSERT,UPDATE,DELETE
   DDL:  数据定义语言,比如创建表,修改表结构等。
   DCL:数据控制语言,比如COMMIT,ROLLBACK,SAVE POINT.
   这个 insert into ... select ,从子查询往表里面插入数据,算DML
作者: 郑全    时间: 2024-11-30 17:32
10.psql元命令\du和\dg都可以列出角色或用户,请问这两个命令是否等价?
A.等价       
B.不等价       
C.不好说       
D.不确定
答案:A

解析:
  \dg Lists database roles. (Since the concepts of “users” and “groups” have been unified into “roles”, this command is now equivalent to \du.)

作者: 郑全    时间: 2024-11-30 17:39
11.psql元命令\pset border 1表示什么?

A.表示输出的内容无边框       
B.表示边框只在输出内容的内部       
C.表示输出内容的内外都有边框       
D.什么也不表示

答案:B

解析:

\pset border 0; 无边框。
peter@localhost testdb=> SELECT * FROM my_table;
first second
----- ------
    1 one
    2 two
    3 three
    4 four
(4 rows)

\pset border 1; 表示边框只在内部。
eter@localhost testdb=> SELECT * FROM my_table;
first | second
-------+--------
     1 | one
     2 | two
     3 | three
     4 | four
(4 rows)

\pset border 2; 内外都有边框。

peter@localhost testdb=> SELECT * FROM my_table;
+-------+--------+
| first | second |
+-------+--------+
|     1 | one    |
|     2 | two    |
|     3 | three  |
|     4 | four   |
+-------+--------+
(4 rows)

作者: 郑全    时间: 2024-11-30 18:06
12.PostgresSQL二进制数据类型的是哪个?
A.blob       
B.bytea       
C.raw       
D.clob
答案:B

解析:
  blob,clob是SQL标准中的叫法,PG中,对应的bytea,具体可以参见官方文档,8.4. Binary Data Types
  所以,答案是B.



作者: 郑全    时间: 2024-11-30 18:27
13.使用CREATE DATABASE创建新数据库时指定字符编码ENCODING参数,请问需要指定哪个模板?

A.template0       
B.template1       
C.template0和template1均可以       
D.template0和template1均不可以

答案:A

解析:
    参见: CREATE DATABASE 语法,部分:The encoding and locale settings must match those of the template database, except when template0 is used as template. This is because other databases might contain data that does not match the specified encoding, or might contain indexes whose sort ordering is affected by LC_COLLATE and LC_CTYPE. Copying such data would result in a database that is corrupt according to the new settings. template0, however, is known to not contain any data or indexes that would be affected.
    大体意思就是template0 ,是一个全新的,没有数据的模板,编码不存在冲突,如果是其他模板,有数据,可能编码有冲突。所以,选择 A。


作者: 郑全    时间: 2024-12-1 14:16
14.删除数据库drop database加上参数if exists是什么意思?
  A. 强制删除该数据库       
  B. 不显示报错信息       
  C. 如果数据库不存在,该命令不报错       
  D. 显示完整的报错信息
  答案:C

  解析:
         下面的执行结果:
          test=# DROP DATABASE IF EXISTS test1;
          NOTICE:  database "test1" does not exist, skipping
           DROP DATABASE

          执行DROP DATABASE IF EXISTS db_name,如果该db_name不存在,不报错,但是会有提示,跳过该动作。
           带 FORCE 选项才是强制删除。
           所以,该题选择 C .
         

  

作者: 郑全    时间: 2024-12-1 14:18
15. 当我们创建一个新的数据库时,PostgresSQL都会自动创建一个名为什么的模式?

A. postgres       
B. postgres       
C. public       
D. osdba

答案:C

解析:
   这个是一个默认规则。记住即可。

作者: 郑全    时间: 2024-12-1 14:22
16. 停止数据库时,最常用的停止模式是哪种?

A. smart shutdown       
B. fast shutdown        
C. immediate shutdown        
D. 以上均不是

答案:B
fast shutdown ,对应ORACLE 的shutdown immediate,算一个比较快速安全的一种停库方式。

作者: 郑全    时间: 2024-12-1 14:33
17. 在PostgresSQL中的一条记录上,事务年龄不能超过多少?

A. 2的16次方       
B. 2的31次方       
C. 2的64次方       
D. 2的63次方

答案:B

解析:
   到17版本为此,是32位,所以,选择B。


作者: 郑全    时间: 2024-12-1 14:45
18. 在PostgresSQL中,请问SELECT操作时,是不是一定没有写磁盘的操作?

A. 是       
B. 不是

答案:B

在内存中有很多脏页的情况下,如果进行select负载测试时,需要不断从磁盘加载数据,此时需要将内存中数据页进行替换以存储磁盘页,若该内存页为脏,需要先将它刷写下来。这是就会有对磁盘的写。如果内存中没有脏页,就不存在这个。所以,说SELECT 操作一定没有写磁盘的操作,就太武断了,所以,本题选择 B.



作者: 郑全    时间: 2024-12-1 14:54
19. 在PostgresSQL中,表和索引的行数、块数等统计信息记录在哪个系统表中?

A. pg_statistic       
B. pg_proc       
C. pg_index       
D. pg_class

答案: D

解析 :
    在pg中主要用两个系统表存储数据库的统计信息

   pg_class:用于记录表和索引的行数、块数等统计信息
   pg_statistic:用于记录由analyze命令创建的统计信息,这些统计信息由查询优化器使用。
   由于pg_statistic记录的数据不易阅读,可以使用pg_statis来查看

      

作者: 郑全    时间: 2024-12-1 14:55
20. 在PostgresSQL中,除了表和索引的行数、块数等统计信息外,其他统计信息记录在哪个系统表中?

A. pg_statistic       
B. pg_proc       
C. pg_index       
D. pg_class
答案: A.

解析 :
    在pg中主要用两个系统表存储数据库的统计信息

   pg_class:用于记录表和索引的行数、块数等统计信息
   pg_statistic:用于记录由analyze命令创建的统计信息,这些统计信息由查询优化器使用。
   由于pg_statistic记录的数据不易阅读,可以使用pg_statis来查看


作者: 郑全    时间: 2024-12-1 15:08
21. 在PostgresSQL中,参数默认的情况下,可建立多少个连普通用户最多接?

A. 100       
B. 103       
C. 97       
D. 3

答案:C

解析:
   本题可以参见官方文档 20.3.1. Connection Settings #
   普通用户可建立多少个连接,是由 max_connections - reserved_connections - superuser_reserved_connections 决定的。
    新安装的系统, max_connections 默认为 100, reserved_connections 默认为0, superuser_reserved_connections  默认为 3 ,所以,普通用户默认为97. 因此,本地选择 C。


作者: 郑全    时间: 2024-12-1 15:16
22. 在PostgresSQL的内存配置项参数中,用于声明内部排序操作和Hash表在开始使用临时磁盘文件之前可使用的内存数目的参数是什么?

A. shared_buffers       
B. temp_buffers       
C. work_mem       
D. autovacuum_work_mem

答案: C

解析:
    1.shared_buffers ---共享缓冲区,它表示数据缓冲区中的数据块的个数
    2.temp_buffers---临时缓冲区,用于存放数据库会话访问临时表数据
    3.work_mem --工作内存或者操作内存,负责内部的sort和hash操作
    4.autovacuum_work_mem-- 维护工作内存,主要针对VACUUM,CREATE INDEX,ALTER TABLE ADD FOREIGN KEY等操作
   



作者: 郑全    时间: 2024-12-1 15:39
23. 在PostgresSQL的日志配置项参数中,用于打开日志的参数是哪个?

A. log_destination       
B. logging_collector       
C. log_file_mode       
D. log_filename

答案: B

解析:
     log_destination :设置日志的目录
     logging_collector: 控制是否打开日志开关
     log_file_mode: 日志目录的权限,默认是 0600,只有postgres用户本身能写。
     log_filename: 日志文件的格式。

     所以,本题选择 B .



作者: 郑全    时间: 2024-12-1 15:47
24. PostgresSQL数据库启动时,会先启动哪个进程?

A. BgWriter       
B. postgres       
C. Postmaster       
D. PgStat

答案: C

解析:
    PG数据库启动时会先启动一个主进程,9.3之前称为postmaster,9.3以后称为postgres server process),然后fork出一些辅助子进程(backend、backgroud相关进程)
   
    这里的 BgWriter ,PgStat 是后台进程,
    postgres 是后端backend 进程,
    Postmaster        这里就是主进程,在PG15以后,直接看不到了,但概念还是它。
作者: 郑全    时间: 2024-12-1 16:09
25. 以下说法是否正确:在PostgresSQL9.3之后,PostgresSQL使用“mmap()”方式的共享内存。使用这种共享内存的好处是不再需要配置内核参数"kernel.shmmax"和"kernel.shmall"。

A. 正确       
B. 不正确

答案: A

解析:
    使用 SHOW shared_memory_type ; 可以看到当前的使用类型,从9.3 开始,默认为 mmap,memory mapped,不需要单独设置 kernel.shmmax和kernel.shmall


作者: 郑全    时间: 2024-12-3 21:16
本帖最后由 郑全 于 2024-12-3 21:23 编辑

26. 在PostgresSQL的以下索引中,最常见的索引并且适合处理等值查询和范围查询的索引是哪个?

A. B-tree        
B. Hash        
C. GiST        
D. SP-GiST        
E. GIN

答案: A

解析:
   1.BTREE索引
      CREATE INDEX默认使用BTREE索引,适合按照顺序存储的数据进行比较查询和范围查询,查询优化器会优先考虑使用BTREE索引,如果涉及到以下任何一种操作:

    1)<,<=,=,>,>=
    2)以及这些操作的组合,比如between and,也可以使用BTREE。
    3)在索引列上的IS NULL 或者IS NOT NULL也可以使用BTREE。
    4)BTREE索引也可以用于模糊查询,但是仅限字符串开头是常量的情况下,比如 name LIKE ‘Jason%’,或者name ~ ’^Jason’。但是name LIKE ‘%Jason’是不能用的。
    5)Min/Max聚集操作也可使用BTREE索引。
    6)其实在merge join以及order by中,可以通过使用BTREE索引的有序性来减少sort带来的代价。
      
   2.Hash索引:
只能处理简单的等值比较,当索引列涉及到等于操作比较时,优化器会考虑使用Hash索引。Hash索引是通过比较hash值来查找定位,如果hash索引列的数据重复度比较高,容易产生严重的hash冲突,从而降低查询效率,因此这种情况下,不适合hash索引。
   3. GiST-(GeneralizedSearch Tree) 索引
不是独立的索引类型,是一种架构或者索引模板,是一棵平衡二叉树。适用于多维数据类型和集合数据类型,和Btree索引类似,同样适用于其他的数据类型。GiST可以用来做位置搜索,如包含、相交、左边、右边等。和Btree索引相比,GiST多字段索引在查询条件中包含索引字段的任何子集都会使用索引扫描,而Btree索引只有查询条件包含第一个索引字段才会使用索引扫描。GiST索引特定操作符类型高度依赖于索引策略(操作符类)。GiST跟Btree索引相比,索引创建耗时较长,占用空间也比较大。
  4. SP-GiST-(space-partitioned GiST)  索引
和GiST类似,但是是一棵不平衡树,支持多维和海量数据,把空间分割成互不相交的部分。SP-GiST适用于空间可以递归分割成不相交区域的结构,包括四叉树、k-D树和基数树。
  5.  GIN- (Generalized InvertedIndex)索引
倒排序索引,适合于包含多个组成值的数据,比如数组,全文检索等。用来保存一个键值对的集合,支持用户定义的索引策略,对于不同的索引策略,可以使用不同的操作符。
  6. BRIN- (Block Range Index)索引
块范围索引,它将数据在磁盘上的block按照一定的数目进行分组,分组之后,计算每组的取值范围。在查找数据时,会遍历这些取值范围,排除掉不在范围之内的分组。BRIN索引适用于存储流式数据日志。例如:按照时间插入的数据,由于数据是按照时间插入,因此数据块上记录的范围信息很少会出现交叉情况,索引过滤后需要比较的数据块也会少很多;反之,如果数据交叉严重,通过索引无法过滤掉任何一个数据块时,操作起来会比全表扫描更加耗时。

作者: 郑全    时间: 2024-12-3 21:17
27. 在PostgresSQL的以下索引中,只能处理简单的等值查询的索引是哪个?

A. B-tree      
B. Hash      
C. GiST      
D. SP-GiST      
E. GIN

答案: B

解析:
      见上一题。

作者: 郑全    时间: 2024-12-3 21:19
28. 在PostgresSQL的以下索引中,下面哪个是反转索引?

A. B-tree      
B. Hash      
C. GiST      
D. SP-GiST      
E. GIN

答案: E

解析:
     见上上题。
作者: 郑全    时间: 2024-12-3 21:27
29. PostgresSQL是否能够自动检测到死锁,然后退出其中一个事务?

A. 是       
B. 否

答案: A

解析:
     和ORACLE一样,自动检测死锁。


作者: 郑全    时间: 2024-12-3 21:36
30. PostgresSQL的时间类型是否可以精确到秒以下?

A. 是       
B. 否

答案: A

解析:
   time,timestamp 都可以到微妙。
   

作者: 郑全    时间: 2024-12-3 21:40
31. PostgresSQL数据库在客户端与服务器之间传递数据时,是否会进行字符集的转换?

A. 是       
B. 否

答案: A.

解析:
    客户端和服务器端字符集不一样时,会向服务器端字符集进行转换。

作者: 郑全    时间: 2024-12-3 21:48
32. PostgresSQL数据库中用于范围快速搜索的数据类型是哪个?

A. 伪类型       
B. 位串类型       
C. Range类型       
D. JSON类型

答案: C
解析:
  range:可以是任何数值类型、日期时间类型或时间间隔类型的范围。

作者: 郑全    时间: 2024-12-3 21:57
33. 在PostgresSQL的数值类型中,目前不支持的类型是什么?

A. 枚举类型       
B. 组合类型       
C. domain类型       
D. 自定义类型

答案: C
解析:
    domain类型 从PG11 开始引入,所以,如果是指 PG16,这个题没有答案。

作者: 郑全    时间: 2024-12-8 12:42
34.PostgresSQL数据库中不能作为字段的数据类型是哪个?

A. 位串类型       
B. 复合类型       
C. 伪类型       
D. 数组类型

答案: C

解析:
    PG支持伪类型,但不能用于字段,只能用于函数的参数,或返回结果的类型。具体可以参见 官方文档 :https://www.postgresql.org/docs/16/datatype-pseudo.html
    其他类型,位串,数组,复合,都能用于字段类型。

   

作者: 郑全    时间: 2024-12-8 14:42
35. PostgresSQL数据库是否支持裸设备和块设备?

A. 支持       
B. 不支持

答案: B

解析:
数据库文件默认保存在initdb创建的数据目录中,它包含数据文件、参数文件、控制文件、数据库运行日志及WAL日志文件。PG不支持裸设备和块设备。
   

作者: 郑全    时间: 2024-12-8 14:55
36. 在PostgresSQL中,以下哪个不是块头记录的信息?

A. 块的checksum值       
B. 空闲空间的真实位置和结束位置       
C. 特殊数据的其实位置       
D. 数据块的位置

答案: D

解析:
  下面列出页头内容,不包含块的位置。

   field        Type        Length        Description
pd_lsn        PageXLogRecPtr        8 bytes        LSN: next byte after last byte of WAL record for last change to this page
pd_checksum        uint16        2 bytes        Page checksum
pd_flags        uint16        2 bytes        Flag bits
pd_lower        LocationIndex        2 bytes        Offset to start of free space
pd_upper        LocationIndex        2 bytes        Offset to end of free space
pd_special        LocationIndex        2 bytes        Offset to start of special space
pd_pagesize_version        uint16        2 bytes        Page size and layout version number information
pd_prune_xid        TransactionId        4 bytes        Oldest unpruned XMAX on page, or zero if none

作者: 郑全    时间: 2024-12-8 16:13
37. 在PostgresSQL中,行指针的结构不包括下面哪一个?

A. 行内容的偏移量       
B. 行内容的位置       
C. 指针的标记       
D. 行内容的长度

答案: B

解析:
     An item identifier contains a byte-offset to the start of an item, its length in bytes, and a few attribute bits which affect its interpretation
     简单说,行指针占4个字节,32位,具体包含如下:

     1.行内容的偏移量,占15个位
     2.行内容的长度,占15个位
     3.指针的标志,占2个位

     尤其注意,行内容的偏移量和行内容的位置,不是一个概念,行内容的偏移量是指行在页内的位置,可以通过行指针快速定位到行数据;行内容的位置是指行数据在磁盘上的位置,所以本题选择 B.

   
   


作者: 郑全    时间: 2024-12-8 16:39
38. 在PostgresSQL中,下面哪个系统字段表示数据行在它所处的表内的物理位置?

A. ctid       
B. xmin       
C. oid       
D. cmin

答案: A.

解析:
  ctid:   表示行在表内的物理位置
  xmin:  表示插入事务的事务ID
  oid:     表的标识
  cmin:   插入事务的命令ID。



作者: 郑全    时间: 2024-12-8 16:53
本帖最后由 郑全 于 2024-12-8 16:57 编辑

39. 在PostgresSQL中,如一个事务失败,在数据文件中这个事务产生的数据会不会在事务回滚时被清理掉?

A. 会        
B. 不会

答案:B

解析:
    PG没有用回滚段,使用的MVCC.事务失败,在数据文件中这个事务产生的数据不会在事务回滚时被清理掉.


作者: 郑全    时间: 2024-12-8 17:04
40. 在PostgresSQL的数据目录结构中,默认表空间的目录是哪个?

A. base       
B. global       
C. pg_tblsp       
D. pg_log

答案: A.

解析:
   BASE : 默认表空间目录
   GLOBAL:数据字典所有目录
   pg_tblsp: 连接到自己创建的表空间
   pg_log: 是保存错误日志等的目录

作者: 郑全    时间: 2024-12-8 17:12
41. 在PostgresSQL的数据目录结构中,一些共享系统表的目录是哪个?

A. base       
B. global       
C. pg_clog       
D. pg_xlog

答案: B 。

解析:
    base: 默认表空间目录
    global: 系统表所在目录
    pg_clog: 事务日志目录
    pg_xlog: wal 日志目录。



作者: 郑全    时间: 2024-12-8 17:22
42. 在PostgresSQL的数据行中,不包括下面哪一个?

A. oid       
B. ctid       
C. checksum       
D. hoff

答案: C

解析:
    数据行头如下:
    Field        Type        Length        Description
t_xmin        TransactionId        4 bytes        insert XID stamp
t_xmax        TransactionId        4 bytes        delete XID stamp
t_cid        CommandId        4 bytes        insert and/or delete CID stamp (overlays with t_xvac)
t_xvac        TransactionId        4 bytes        XID for VACUUM operation moving a row version
t_ctid        ItemPointerData        6 bytes        current TID of this or newer row version
t_infomask2        uint16        2 bytes        number of attributes, plus various flag bits
t_infomask        uint16        2 bytes        various flag bits
t_hoff        uint8        1 byte        offset to user data






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