考试科目:PGCA-E-090
考试题量:40 道单项选择题、10 道多项选择题(每题 2 分)
通过分数:60%
考试时间:60min
本文为云贝教育刘峰(微信:yunbee_DBA)原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。
psql元命令\du和\dg都可以列出角色或用户,请问这两个命令是否等价?
A.等价
B.不等价
C.不好说
D.不确定
参考答案:A
解析:
要确认某个封装命令是否等价,只需要看后台调用的SQL即可。
一、开启SQL跟踪功能
1.1 修改参数,开启sql跟踪
修改前
#log_statement = 'none' # none, ddl, mod, all
修改后
log_statement = 'all' # none, ddl, mod, all
1.2 重载使参数生效
[postgres@ora19c02 data]$ pg_ctl reload -D $PGDATA
二、测试功能
2.1 du命令
[postgres@ora19c02 data]$ psql -d testdb
psql (15.4)
Type "help" for help.
testdb=# \duList of rolesRole name | Attributes | Member of
-----------+------------------------------------------------------------+-----------postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}test | | {}
查看日志输出
2023-10-23 09:42:57.547 CST [56704] LOG: statement: SELECT r.rolname, r.rolsuper, r.rolinherit,r.rolcreaterole, r.rolcreatedb, r.rolcanlogin,r.rolconnlimit, r.rolvaliduntil,ARRAY(SELECT b.rolnameFROM pg_catalog.pg_auth_members mJOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)WHERE m.member = r.oid) as memberof, r.rolreplication, r.rolbypassrlsFROM pg_catalog.pg_roles rWHERE r.rolname !~ '^pg_'ORDER BY 1;
2.2 du命令
testdb=# \dgList of rolesRole name | Attributes | Member of
-----------+------------------------------------------------------------+-----------postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}test | | {}
查看日志输出
2023-10-23 09:43:30.543 CST [56704] LOG: statement: SELECT r.rolname, r.rolsuper, r.rolinherit,r.rolcreaterole, r.rolcreatedb, r.rolcanlogin,r.rolconnlimit, r.rolvaliduntil,ARRAY(SELECT b.rolnameFROM pg_catalog.pg_auth_members mJOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)WHERE m.member = r.oid) as memberof, r.rolreplication, r.rolbypassrlsFROM pg_catalog.pg_roles rWHERE r.rolname !~ '^pg_'ORDER BY 1;
三、结论
由上述实验可以得出结论,两者调用的是同一个SQL,是等价的。