暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

关于PostgreSQL系统表、函数,看完这篇就够了!

呆呆的私房菜 2024-07-26
667
    Whoami:5年+金融、政府、医疗领域工作经验的DBA
    Certificate:OCP、PCP
    Skill:Oracle、Mysql、PostgreSQL
    Platform:CSDN、墨天伦、公众号(呆呆的私房菜)



    阅读本文可以了解到PostgreSQL数据库系统表、函数相关的内容。




    01

    系统表模式
    • 除了public和用户创建的模式之外,每个数据库都包含一个pg_catalog模式,它包含了系统表和所有内置数据类型、函数和操作符。

    • pg_catalog总是搜索路径中的一部分,如果它没有明确出现在路径中,那么它会隐含地在路径模式之前搜索。


    02

    系统表
      select relkind, relname from pg_class 
      where relnamespace = (select oid from pg_namespace where nspname='pg_catalog') and relkind = 'r' order by 1, 2;
      目录名用途
      pg_aggregate
      聚集函数
      pg_am
      关系访问方法
      pg_amop
      访问方法操作符
      pg_amproc
      访问方法支持函数
      pg_attrdef
      列默认值
      pg_attribute
      表列(“属性”)
      pg_authid
      认证标识符(角色)
      pg_auth_members
      认证标识符成员关系
      pg_cast
      转换(数据类型转换)
      pg_class
      表、索引、序列、视图 (“关系”)
      pg_collation
      排序规则(locale信息)
      pg_constraint
      检查约束、唯一约束、主键约束、外键约束
      pg_conversion
      编码转换信息
      pg_database
      本数据库集簇中的数据库
      pg_db_role_setting
      每角色和每数据库的设置
      pg_default_acl
      对象类型的默认权限
      pg_depend
      数据库对象间的依赖
      pg_description
      数据库对象上的描述或注释
      pg_enum
      枚举标签和值定义
      pg_event_trigger
      事件触发器
      pg_extension
      已安装扩展
      pg_foreign_data_wrapper
      外部数据包装器定义
      pg_foreign_server
      外部服务器定义
      pg_foreign_table
      外部表信息
      pg_index
      索引信息
      pg_inherits
      表继承层次
      pg_init_privs
      对象初始特权
      pg_language
      编写函数的语言
      pg_largeobject
      大对象的数据页
      pg_largeobject_metadata
      大对象的元数据
      pg_namespace
      模式
      pg_opclass
      访问方法操作符类
      pg_operator
      操作符
      pg_opfamily
      访问方法操作符族
      pg_partitioned_table
      表的分区键的信息
      pg_policy
      行安全策略
      pg_proc
      函数和过程
      pg_publication
      用于逻辑复制的发布
      pg_publication_rel
      发布映射的关系
      pg_range
      范围类型的信息
      pg_replication_origin
      已注册的复制源
      pg_rewrite
      查询重写规则
      pg_seclabel
      数据库对象上的安全标签
      pg_sequence
      有关序列的信息
      pg_shdepend
      共享对象上的依赖
      pg_shdescription
      共享对象上的注释
      pg_shseclabel
      共享数据库对象上的安全标签
      pg_statistic
      规划器统计
      pg_statistic_ext
      扩展的规划器统计信息(定义)
      pg_statistic_ext_data
      扩展的规划器统计信息(已构建的统计信息)
      pg_subscription
      逻辑复制订阅
      pg_subscription_rel
      订阅的关系状态
      pg_tablespace
      本数据库集簇内的表空间
      pg_transform
      转换(将数据类型转换为过程语言需要的形式)
      pg_trigger
      触发器
      pg_ts_config
      文本搜索配置
      pg_ts_config_map
      文本搜索配置的记号映射
      pg_ts_dict
      文本搜索字典
      pg_ts_parser
      文本搜索分析器
      pg_ts_template
      文本搜索模板
      pg_type
      数据类型
      pg_user_mapping
      将用户映射到外部服务器


      03

      系统视图
        ## 查看所有系统视图
        select relkind,relname from pg_class
        where relnamespace = (select oid from pg_namespace where nspname='pg_catalog') and relkind = 'v' order by 1, 2;
        视图名字用途
        pg_available_extensions
        可用的扩展
        pg_available_extension_versions
        所有版本的扩展
        pg_config
        编译时配置参数
        pg_cursors
        打开的游标
        pg_file_settings
        配置文件内容摘要
        pg_group
        数据库用户组
        pg_hba_file_rules
        客户端认证配置文件内容的摘要
        pg_indexes
        索引
        pg_locks
        当前保持或者等待的锁
        pg_matviews
        物化视图
        pg_policies
        策略
        pg_prepared_statements
        预备好的语句
        pg_prepared_xacts
        预备好的事务
        pg_publication_tables
        publication和它们相关的表
        pg_replication_origin_status
        有关复制源的信息,包括复制进度
        pg_replication_slots
        复制槽信息
        pg_roles
        数据库角色
        pg_rules
        规则
        pg_seclabels
        安全标签
        pg_sequences
        序列
        pg_settings
        参数设置
        pg_shadow
        数据库用户
        pg_shmem_allocations
        共享内存分配
        pg_stats
        规划器统计信息
        pg_stats_ext
        扩展的计划器统计信息
        pg_tables
        pg_timezone_abbrevs
        时区简写
        pg_timezone_names
        时区名字
        pg_user
        数据库用户
        pg_user_mappings
        用户映射
        pg_views
        视图


        04

        系统函数

        参考链接:https://www.postgresql.org/docs/14/functions-info.html

        • 会话信息函数:
        函数名字用途
        current_catalog
        返回当前数据库的名称
        current_query
        返回客户端提交的当前正在执行的查询文本
        current_role
        返回当前role
        current_schema
        回搜索路径中第一个出现的架构的名称
        current_user
        返回当前用户名
        inet_client_addr
        返回当前客户端的 IP 地址
        inet_client_port
        返回当前客户端的 IP 端口号
        inet_server_addr
        返回服务器接受当前连接的 IP
        inet_client_port
        返回当前客户端的 IP 端口号
        inet_server_port
        返回服务器接受当前连接的 IP 端口号
        pg_backend_pid
        返回附加到当前会话的服务器进程的进程 ID。
        pg_blocking_pids
        返回一个会话的进程 ID 数组
        pg_conf_load_time
        返回上次加载服务器配置文件的时间
        pg_current_logfile
        返回日志记录收集器当前正在使用的日志文件的路径名
        pg_my_temp_schema
        回当前会话的临时架构的 OID
        pg_is_other_temp_schema
        如果给定的 OID 是另一个会话的临时架构的 OID返回true
        pg_jit_available
        如果 JIT 编译器扩展可用(请参阅第 32 章),并且 jit 配置参数设置为 on ,则返回 true。
        pg_listening_channels
        返回当前会话正在侦听的异步通知通道的名称集
        pg_notification_queue_usage
        异步通知队列的最大大小的分数 (0–1),该大小当前由等待处理的通知占用
        pg_postmaster_start_time
        返回服务器启动的时间
        pg_safe_snapshot_blocking_pids
        返回一个会话的进程 ID 数组,这些会话阻止具有指定进程 ID 的服务器进程获取安全快照,如果没有此类服务器进程或未阻止该进程,则返回一个空数组
        pg_trigger_depth
        返回会话用户的名称
        session_user
        返回当前会话正在侦听的异步通知通道的名称集
        user
        相当于current_user
        version
        返回PostgreSQL服务器版本
        • 权限查询函数:
        函数名字用途
        has_any_column_privilege
        用户是否对表的任何列具有权限
        has_column_privilege
        用户是否具有指定表列的权限
        has_database_privilege
        用户是否具有数据库的权限
        has_foreign_data_wrapper_privilege
        用户是否具有外部数据包装器的权限
        has_function_privilege
        用户是否具有函数权限
        has_language_privilege
        用户是否具有语言权限
        has_schema_privilege
        用户是否具有schema的权限
        has_sequence_privilege
        用户是否具有序列的权限
        has_server_privilege
        用户是否具有使用外部服务器的权限
        has_table_privilege
        用户是否具有表的权限
        has_tablespace_privilege
        用户是否具有表空间的权限
        has_type_privilege
        用户是否具有数据类型的权限
        pg_has_role
        用户是否具有角色权限
        row_security_active
        在当前用户和当前环境的上下文中,指定表的行级别安全性是否处于活动状态
        • 管理aclitem函数:
        函数名字用途
        acldefault(type, ownerId)
        用户是否对表的任何列具有权限
        aclexplode(aclitem[])
        用户是否具有指定表列的权限
        makeaclitem(grantee, grantor, privilege, grantable)
        用从输入中建立一个aclitem
        • 模式可见性查询函数

        函数名字用途
        pg_collation_is_visible
        排序规则在搜索路径中是否可见
        pg_conversion_is_visible
        转化在搜索路径中是否可见
        pg_function_is_visible
        函数在搜索路径中是否可见
        pg_opclass_is_visible
        运算类在搜索路径中是否可见
        pg_operator_is_visible
        运算符在搜索路径中是否可见
        pg_opfamily_is_visible
        算子族在搜索路径中是否可见
        pg_statistics_obj_is_visible
        统计信息对象在搜索路径中是否可见
        pg_table_is_visible
        表格在搜索路径中是否可见
        pg_ts_config_is_visible
        文本搜索配置在搜索路径中是否可见
        pg_ts_dict_is_visible
        文本搜索词典在搜索路径中是否可见
        pg_ts_parser_is_visible
        文本搜索解析器在搜索路径中是否可见
        pg_ts_template_is_visible
        文本搜索模板在搜索路径中是否可见
        pg_type_is_visible
        类型(或域)在搜索路径中是否可见
        • catalog函数

        函数名字用途
        format_type
        返回由其类型 OID 标识的数据类型的 SQL 名称
        pg_get_catalog_foreign_keys
        返回一组记录,用于描述 PostgreSQL 系统目录中存在的外键关系
        pg_get_constraintdef
        重建约束的创建命令
        pg_get_expr
        反编译存储在系统目录中的表达式的内部形式,例如列的默认值
        pg_get_functiondef
        重构函数或过程的创建命令
        pg_get_function_arguments
        以函数或过程需要出现在其中 CREATE FUNCTION 的形式(包括默认值)重建函数或过程的参数列表
        pg_get_function_identity_arguments
        重建标识函数或过程所需的参数列表,其形式需要出现在诸如 ALTER FUNCTION 的命令中
        pg_get_function_result
        以函数需要出现在 中 CREATE FUNCTION 的形式重构函数 RETURNS 的子句。过程的返回 NULL 。
        pg_get_indexdef
        重建索引的创建命令
        pg_get_keywords
        返回一组记录,描述服务器识别的 SQL 关键字。
        pg_get_ruledef
        重建规则的创建命令
        pg_get_serial_sequence
        返回与列关联的序列的名称,如果没有与列关联的序列,则返回 NULL
        pg_get_statisticsobjdef
        为扩展统计信息对象重建创建命令
        pg_get_triggerdef
        重建触发器的创建命令
        pg_get_userbyid
        返回给定其 OID 的角色名称
        pg_get_viewdef
        重建视图或实例化视图的基础 SELECT 命令
        pg_index_column_has_property
        测试索引列是否具有命名属性
        pg_index_has_property
        测试索引是否具有命名属性。
        pg_indexam_has_property
        测试索引访问方法是否具有 named 属性
        pg_options_to_table
        返回由 中的 pg_class 值表示的存储选项集
        pg_tablespace_databases
        返回在指定表空间中存储对象的数据库的 OID 集
        pg_tablespace_location
        返回此表空间所在的文件系统路径
        COLLATION FOR ( "any" )
        返回传递给它的值的排序规则的名称
        to_regclass
        将文本关系名称转换为其 OID
        to_regcollation
        将文本排序规则名称转换为其 OID
        to_regnamespace
        将文本模式名称转换为其 OID
        to_regoper
        文本运算符名称转换为其 OID
        to_regoperator
        文本运算符名称(带有参数类型)转换为其 OID
        to_regproc
        文本函数或过程名称转换为其 OID
        to_regprocedure
        文本函数或过程名称(带有参数类型)转换为其 OID
        to_regrole
        文本角色名称转换为其 OID
        to_regtype
        文本类型名称转换为其 OID
        • 索引列属性函数

        函数名字用途
        asc
        列在正向扫描时是否按升序排序?
        desc
        列在正向扫描时是否按降序排序?
        nulls_first
        列是否在正向扫描时首先使用 null 排序
        null_last
        使用 null 排序的列是否在正向扫描中持续存在
        orderable
        该列是否具有任何定义的排序顺序
        distance_orderable
        例如 ORDER BY col <-> constant ,是否可以通过“距离”操作员按顺序扫描色谱柱
        returnable
        仅索引扫描是否可以返回列值
        search_array
        该列是否原生支持 col = ANY(array) 搜索
        search_nulls
        该列是否支持 IS NULL 和 IS NOT NULL 搜索
        pg_get_userbyid
        返回给定其 OID 的角色名称
        clusterable
        索引是否支持在 CLUSTER 命令中使用
        sindex_scan
        索引是否支持扫描
        sbitmap_scan
        索引是否支持位图扫描
        backward_scan
        是否可以在扫描过程中更改扫描方向(以在不需要具体化的情况下支持 FETCH BACKWARD 光标)?
        can_order
        访问方式是否支持 ASC , DESC 以及中的 CREATE INDEX 相关关键字
        can_unique
        访问方式是否支持唯一索引
        can_multi_col
        访问方式是否支持多列索引
        can_exclude
        访问方法是否支持排除约束
        can_include
        访问方法是否支持 INCLUDE
         ? CREATE INDEX
        • 对象信息和寻址函数

        函数名字用途
        pg_describe_object
        返回由目录 OID、对象 OID 和子对象 ID 标识的数据库对象的文本说明
        pg_identify_object
        返回一行,其中包含足够的信息,以唯一标识由目录 OID、对象 OID 和子对象 ID 指定的数据库对象
        pg_identify_object_as_address
        返回一行,其中包含足够的信息,以唯一标识由目录 OID、对象 OID 和子对象 ID 指定的数据库对象
        pg_get_object_address
        返回一行,其中包含足够的信息,以唯一标识由类型、代码和对象名称以及参数数组指定的数据库对象。
        • 描述信息函数

        函数名字用途
        col_description
        返回表列的注释,该注释由其表的 OID 及其列号指定
        obj_description
        返回由其 OID 指定的数据库对象的注释以及包含系统目录的名称
        obj_description
        返回仅由其 OID 指定的数据库对象的注释
        shobj_description
        返回由其 OID 指定的共享数据库对象的注释以及包含系统目录的名称
        • 事务ID和快照信息函数

        函数名字用途
        pg_current_xact_id
        返回当前事务的 ID,如果当前事务还没有一个(因为它尚未执行任何数据库更新),它将分配一个新的
        pg_current_xact_id_if_assigned
        返回当前事务的 ID,如果 NULL 尚未分配 ID,则返回。(如果事务可能是只读的,则最好使用此变体,以避免不必要地使用 XID
        pg_xact_status
        报告最近事务的提交状态
        pg_current_snapshot
        返回当前快照,这是一个数据结构,显示现在正在处理的事务 ID
        pg_snapshot_xip
        返回当前事务的 ID,如果当前事务还没有一个(因为它尚未执行任何数据库更新),它将分配一个新的
        pg_snapshot_xmax
        返回快照 xmax 
        pg_snapshot_xmin
        返回快照 xmin
        pg_visible_in_snapshot
        根据此快照,给定的事务 ID 是否可见



        本文内容就到这啦,阅读完本篇,相信你也对PostgreSQL数据库的系统表、视图和函数一目了然了吧!我们下篇再见!

        点击上方公众号,关注我吧!


        文章转载自呆呆的私房菜,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论