Postgresql从小白到高手 九:pgsql 复杂查询及内部表高级查询
文章目录
- Postgresql从小白到高手 九:pgsql 复杂查询及内部表高级查询
- 一、多表查询
- 二、pgsql内部表
- 1.内部表
- 2.内部表查询应用
 
一、多表查询
内联 :inner join ··· on 简写 join ··· on
 结果集只有符合 筛选条件的才展现。
外联
 left outer join ···· on 简写 – left join ·· on
 这个查询是一个左外连接, 因为在连接操作符左部的表中的行在输出中至少要出现一次, 而在右部的表的行只有在能找到匹配的左部表行时才被输出。 如果输出的左部表的行没有对应匹配的右部表的行,那么右部表行的列将填充空值(null)。
 
 
右联接
 right join ··· on
 与左连接相对应,右表展现,左表符合条件展现,无符合数据列展现为null
 
 
全外连接
 full outer join ··· on
 同时在查询结果上做左连接和右连接,不满足条件时,值为null 。


自连接
 select * from test1 t1 join test1 t2 on t1.code = t2.code
 自连接在处理 字段细节分析很有效果 。
union all
 将结果集合并,不会删除重复行,但要求左右结果集有相同列
二、pgsql内部表
1.内部表

 两个页:
 information_schema:
 表信息:
 information_schema.tables ,相当于Oracle中的all_tables
 字段信息:
 information_schema.columns,相当于Oracle中的all_tab_cloumns
 约束信息:
 information_schema.table_constraints
 权限信息:
 table_privileges中记录了表权限,column_privileges中记录了列上的权限,routine_privileges上记录了function/procedure的权限,role_usage_grants记录了sequence/domain等类型的对象的usage权限,跟usage_privileges类似
 视图信息:
 Views中记录视图基础信息,view_table_usage记录视图所依赖的表,view_routine_usage记录所依赖的function, view_column_usage记录所涉及的字段
 查视图:
 select * from information_schema.views
 查表列信息:
 SELECT
 *
 FROM
 information_schema.columns
 WHERE
 table_name = ‘employee’
 ORDER BY
 ordinal_position;
查函数:
 select * from information_schema.routines where routine_type = ‘FUNCTION’;
 查触发器:
 select * from information_schema.triggers;
pg_catalog
 查询索引:
 select * from pg_catalog.pg_indexes;
 查视图:
 select * from pg_catalog.pg_views;
| 表名字 | 用途 | 
|---|---|
| pg_aggregate | 聚集函数 | 
| pg_am | 索引访问方法 | 
| pg_amop | 访问方法操作符 | 
| pg_amproc | 访问方法支持过程 | 
| pg_attrdef | 字段缺省值 | 
| pg_attribute | 表的列(也称为”属性”或”字段”) | 
| pg_authid | 认证标识符(角色) | 
| pg_auth_members | 认证标识符成员关系 | 
| pg_autovacuum | 每个关系一个的自动清理配置参数 | 
| pg_cast | 转换(数据类型转换) | 
| pg_class | 表、索引、序列、视图(“关系”) | 
| pg_constraint | 检查约束、唯一约束、主键约束、外键约束 | 
| pg_conversion | 编码转换信息 | 
| pg_database | 本集群内的数据库 | 
| pg_depend | 数据库对象之间的依赖性 | 
| pg_description | 数据库对象的描述或注释 | 
| pg_index | 附加的索引信息 | 
| pg_inherits | 表继承层次 | 
| pg_language | 用于写函数的语言 | 
| pg_largeobject | 大对象 | 
| pg_listener | 异步通知 | 
| pg_namespace | 模式 | 
| pg_opclass | 索引访问方法操作符类 | 
| pg_operator | 操作符 | 
| pg_pltemplate | 过程语言使用的模板数据 | 
| pg_proc | 函数和过程 | 
| pg_rewrite | 查询重写规则 | 
| pg_shdepend | 在共享对象上的依赖性 | 
| pg_shdescription | 共享对象上的注释 | 
| pg_statistic | 优化器统计 | 
| pg_tablespace | 这个数据库集群里面的表空间 | 
| pg_trigger | 触发器 | 
| pg_type | 数据类型 | 
2.内部表查询应用
查锁表
 SELECT
 locktype,
 database,
 relation::regclass,
 mode,
 granted
 FROM
 pg_locks
 WHERE
 relation IS NOT NULL
 AND mode != ‘AccessShareLock’
 AND NOT granted;
查询字段在存过中的使用:
 select n.nspname as “Schema”,p.proname from pg_proc p
 LEFT JOIN pg_namespace n ON n.oid = p.pronamespace
 where upper(prosrc) like upper(‘%account_period%’) – 表字段名称
 –and n.nspname = ‘public’
 and p.proname not in (‘account_period’);
查询库中字段在各个表的信息:
 SELECT
 table_schema || ‘.’ || table_name AS “table”,
 column_name,
 data_type,
 is_nullable,
 column_default,character_maximum_length
 FROM
 information_schema.columns
 where column_name in (‘classcode’,‘policyno’) and table_schema =‘public’
 and character_maximum_length not in (‘200’,‘15’)
 ORDER BY
 table_schema,
 table_name,
 ordinal_position;
查询表占用空间:
 SELECT nspname || ‘.’ || relname AS “relation”,
 pg_size_pretty(pg_total_relation_size(C.oid)) AS “total_size”
 FROM pg_class C
 LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
 WHERE nspname NOT IN (‘pg_catalog’, ‘information_schema’)
 AND C.relkind <> ‘i’
 AND nspname !~ ‘^pg_toast’
 ORDER BY pg_total_relation_size(C.oid) DESC
 LIMIT 5;
查数据库占用空间:
 SELECT
 pg_database.datname AS “database_name”,
 pg_size_pretty(pg_database_size (pg_database.datname)) AS size_in_mb
 FROM
 pg_database
 ORDER BY
 size_in_mb DESC;
清理表空间:
 VACUUM (VERBOSE, FULL, FREEZE);
 VACUUM (VERBOSE, FULL, FREEZE, TABLE_NAME);
pg_repack 扩展包需安装
 pg_repack-- 打包整理表空间 – pg_repack table_name;