PostgreSQL pg_proc
pg_proc 是 PostgreSQL 中的系统表,用于存储数据库中的函数(functions)信息。每个函数在 pg_proc 表中都有一条记录,包含了函数的详细信息,例如函数的名称、参数类型、返回类型、权限等。以下是 pg_proc 表的一些关键字段: proname: 函数的名称。 proargtypes: 函数的参数类型,是一个数组,包含了函数各个参数的数据类型。 prorettype: 函数的返回类型,表示函数返回值的数据类型。 proargmodes: 函数的参数模式,指定了每个参数是输入参数、输出参数还是输入输出参数。 proacl: 函数的权限信息,包括哪些用户或角色对该函数有访问权限。你可以使用如下的 SQL 查询语句查看 pg_proc 表的内容:SELECT * FROM pg_proc;这将返回 pg_proc 表中所有函数的详细信息。如果你对特定函数的信息感兴趣,可以添加条件来过滤结果,例如:SELECT * FROM pg_proc WHERE proname = 'your_function_name';请将 'your_func...
PostgreSQL pg_policy
pg_policy 是 PostgreSQL 系统目录表之一,用于存储行级安全策略(Row-level Security Policy)的信息。行级安全策略是 PostgreSQL 中的一种安全特性,允许对表的行进行基于用户或角色的访问控制。以下是 pg_policy 表的一些关键列: oid: 行级安全策略的唯一标识符(对象标识符)。 polname: 策略的名称。 polrelid: 与策略关联的表的 OID。 polcmd: 策略应用的命令(例如,INSERT、UPDATE、DELETE)。 polpermissive: 策略是否是宽松的(true 或 false)。 polroles: 与策略相关联的角色的 OID 数组。 polqual: 策略的条件谓词。行级安全策略允许在表上定义安全规则,以限制用户或角色对表中特定行的访问。策略可以基于不同的命令(插入、更新、删除)和条件来定义。宽松策略允许符合条件的行访问,而严格策略则禁止访问。以下是一个简单的查询示例,用于检索数据库中的行级安全策略信息:SELECT oid, polname, polrelid::regclass AS...
PostgreSQL pg_partitioned_table
pg_partitioned_table 是 PostgreSQL 系统目录表之一,用于存储分区表的信息。分区表是一种数据库表的组织方式,将大表分割成较小的子表,以提高查询性能和简化数据管理。以下是 pg_partitioned_table 表的一些关键列: partrelid: 分区表的 OID(对象标识符)。 partstrat: 分区表的分区策略(例如,range、list 等)。 partoptions: 分区表的选项。分区表的创建是通过 CREATE TABLE 语句的 PARTITION BY 子句实现的,其中指定了分区表的分区策略。分区策略可以是 RANGE、LIST、HASH 等,具体取决于数据的分布和查询需求。以下是一个简单的查询示例,用于检索数据库中的分区表信息:SELECT partrelid::regclass AS table_name, partstrat, partoptionsFROM pg_partitioned_table;此查询返回了数据库中所有分区表的名称、分区策略和选项的信息。当你创建分区表时,通常会定义分区键、分区规则,并创建分区子表。分区表...
PostgreSQL pg_opfamily
pg_opfamily 是 PostgreSQL 系统目录表之一,用于存储操作符族(Operator Family)的信息。操作符族是一组相关的操作符,通常用于支持索引操作,例如定义排序规则、范围查询等。以下是 pg_opfamily 表的一些关键列: oid: 操作符族的唯一标识符(对象标识符)。 opfname: 操作符族的名称。 opfnamespace: 操作符族所属的命名空间(通常是 pg_catalog)。 opfmethod: 操作符族的存储和比较方法的 OID。 opfstrategy: 操作符族的策略(例如 B-tree 策略、哈希策略等)。 opfamily: 操作符族的 OID。 opflefttype: 操作符族的左操作数的数据类型的 OID。 opfrighttype: 操作符族的右操作数的数据类型的 OID。 opfname: 操作符族的名称。操作符族定义了一组关联的操作符,这些操作符通常用于支持特定类型的索引。例如,B-tree 索引使用操作符来定义排序规则,而哈希索引使用操作符来定义哈希函数。以下是一个简单的查询示例,用于检索数据库中的操作符族信息:SE...
PostgreSQL pg_operator
pg_operator 是 PostgreSQL 系统目录表之一,用于存储操作符(Operator)的信息。操作符是用于执行运算的数据库对象,可以是算术运算、逻辑运算、比较运算等。以下是 pg_operator 表的一些关键列: oid: 操作符的唯一标识符(对象标识符)。 oprname: 操作符的名称。 oprnamespace: 操作符所属的命名空间(通常是 pg_catalog)。 oprleft: 操作符的左操作数的数据类型的 OID。 oprright: 操作符的右操作数的数据类型的 OID。 oprcode: 操作符的实际执行函数的 OID。 oprresult: 操作符的结果数据类型的 OID。 oprcom: 逆操作符(逆运算符)的 OID。 oprnegate: 否定操作符(用于逻辑运算)的 OID。 oprlsortop: 左操作数排序操作符的 OID。 oprrsortop: 右操作数排序操作符的 OID。 oprisleft: 表示操作符是否是左结合的(true 或 false)。 oprisright: 表示操作符是否是右结合的(true 或 false)。...
PostgreSQL pg_opclass
pg_opclass 是 PostgreSQL 系统目录表之一,用于存储操作符类(Operator Class)的信息。操作符类是一种在索引中定义索引操作符的结构,允许数据库系统按照特定的方式对索引中的数据进行排序和比较。以下是 pg_opclass 表的一些关键列: oid: 操作符类的唯一标识符(对象标识符)。 opcname: 操作符类的名称。 opcnamespace: 操作符类所属的命名空间(通常是 pg_catalog)。 opcowner: 操作符类的所有者(用户的 OID)。 opcfamily: 操作符类所属的操作符族(Operator Family)的 OID。 opcinputtype: 操作符类的输入数据类型的 OID。 opcintype: 操作符类的输入数据类型的 OID(与 opcinputtype 相同)。 opckeytype: 操作符类的索引键数据类型的 OID。 opcdefault: 操作符类是否是操作符族的默认操作符类(true 或 false)。操作符类定义了在索引操作中如何处理索引键的规则,它通常与特定的数据类型和操作符相关联。一个索引可以...
PostgreSQL pg_namespace
pg_namespace 是 PostgreSQL 系统目录表之一,用于存储命名空间(Namespace)的信息。在 PostgreSQL 中,命名空间是一种用于将对象组织成模块的机制,允许用户创建具有相同名称但位于不同命名空间的对象而不会发生冲突。以下是 pg_namespace 表的一些关键列: oid: 命名空间的唯一标识符(对象标识符)。 nspname: 命名空间的名称。 nspowner: 命名空间的所有者(用户的 OID)。 nspacl: 命名空间的访问控制列表(ACL)。命名空间提供了一种将数据库对象组织成模块的方式,以防止对象名称的冲突。例如,你可以在不同的命名空间中创建同名的表、函数等,而它们在不同的命名空间中是独立的。以下是一个简单的查询示例,用于检索数据库中的命名空间信息:SELECT oid, nspname, nspownerFROM pg_namespace;此查询返回了数据库中所有命名空间的 OID、名称和所有者的信息。当创建一个新的模块或架构时,通常会创建一个新的命名空间,并将相关的对象(表、函数、视图等)放置在该命名空间中,以便更好地组织和管理数据...
PostgreSQL pg_largeobject_metadata
pg_largeobject_metadata 是 PostgreSQL 系统目录表之一,用于存储大对象(Large Object,简称 LOB)的元数据信息。与 pg_largeobject 表不同,pg_largeobject_metadata 表记录了大对象的一些额外属性。以下是 pg_largeobject_metadata 表的一些关键列: oidvector: 大对象的数据页的数组。 oid: 大对象的唯一标识符(对象标识符)。 oidversion: 大对象的版本。 oidnext: 下一个大对象的 OID。 pages: 大对象占用的数据页数。 last_page: 最后一页的编号。 chunk_size: 大对象的块大小。大对象是二进制数据的存储方式,而 pg_largeobject_metadata 记录了关于这些大对象的元数据信息。这些信息包括了大对象的标识符、版本、占用的数据页数等。要查询大对象的元数据信息,可以执行类似以下的 SQL 查询:SELECT oid, oidversion, pages, last_page, chunk_sizeFROM pg_l...
PostgreSQL pg_largeobject
pg_largeobject 是 PostgreSQL 系统目录表之一,用于存储大对象(Large Object,简称 LOB)的信息。大对象是二进制数据(如图像、音频、视频文件等)的存储方式,相对于一般表中的二进制数据而言,它具有更大的灵活性和性能。以下是 pg_largeobject 表的一些关键列: loid: 大对象的唯一标识符(对象标识符)。 pagemode: 大对象的页模式。 oidvector: 大对象的数据页的数组。 datoid: 大对象所属表空间的 OID。大对象的数据通常分散存储在多个数据页上,pg_largeobject 表记录了这些大对象的元数据信息。要操作大对象,可以使用 pg_largeobject 表提供的函数,例如 lo_create、lo_open、lo_write、lo_read 等。下面是一些基本的大对象操作示例:1. 创建大对象: SELECT lo_create(0); 这会返回一个新的大对象的 OID。2. 打开大对象: SELECT lo_open(your_lo_oid, x); 这里,your_lo_oid 是创建大...
PostgreSQL pg_language
pg_language 是 PostgreSQL 系统目录表之一,用于存储数据库中支持的编程语言的信息。在 PostgreSQL 中,编程语言是一种可插拔的扩展,它允许用户在数据库中使用不同的编程语言编写存储过程、触发器等数据库对象。以下是 pg_language 表的一些关键列: oid: 编程语言的唯一标识符(对象标识符)。 lanname: 编程语言的名称。 lanowner: 编程语言的所有者(用户的 OID)。 lanispl: 表示编程语言是否是过程化语言(true 或 false)。 lanpltrusted: 表示编程语言是否是受信任的(true 或 false)。 lanplcallfoid: 编程语言的“call” 函数的 OID。 lanplinline: 表示编程语言的“inline” 函数的 OID。 lanplvalidator: 表示编程语言的验证函数的 OID。 lantransform: 表示编程语言的转换函数的 OID。编程语言的存在允许用户在 PostgreSQL 中使用更多的灵活性和扩展性来实现定制的功能。例如,PostgreSQL 支持多种编程...
PostgreSQL pg_init_privs
在 PostgreSQL 中,没有 pg_init_privs 这个系统目录表。在 PostgreSQL 中,与权限相关的信息主要存储在 pg_namespace、pg_class、pg_attribute、pg_proc、pg_database、pg_roles 等系统表中。如果你需要查询有关特定对象(如表、视图、函数等)的权限信息,可以使用 pg_namespace、pg_class、pg_proc 等表来检索。例如,可以通过以下查询获取表的权限信息:SELECT table_name, privilege_type, granteeFROM information_schema.table_privilegesWHERE table_schema = 'your_schema' AND table_name = 'your_table';请注意替换 'your_schema' 和 'your_table' 为实际的架构和表名。
PostgreSQL pg_inherits
pg_inherits 是 PostgreSQL 系统目录表之一,用于存储表继承关系的信息。表继承是 PostgreSQL 中的一种特性,允许创建一个表,该表继承自一个或多个父表,从而继承父表的结构和数据。以下是 pg_inherits 表的一些关键列: inhrelid: 子表的 OID(对象标识符)。 inhparent: 父表的 OID。 inhseqno: 表示表在继承关系中的顺序。表继承是一种用于实现面向对象编程中的“is-a”关系的机制,其中子表是父表的扩展,包含父表的所有列以及额外的列。通过使用表继承,可以轻松创建具有相似结构但包含不同数据的表。以下是一个简单的查询示例,用于获取表继承关系的信息:SELECT inhrelid::regclass AS child_table, inhparent::regclass AS parent_table, inhseqnoFROM pg_inherits;此查询返回了数据库中所有表继承关系的子表名称、父表名称和继承关系中的顺序。当你创建一个新表并希望它继承自现有表时,可以使用 CREATE TABLE ...
PostgreSQL pg_index
pg_index 是 PostgreSQL 系统目录表之一,用于存储关于数据库索引的信息。索引是用于提高数据库查询性能的数据结构,它们通过在数据库表上创建索引来加速特定的检索操作。以下是 pg_index 表的一些关键列: indexrelid: 索引的 OID(对象标识符)。 indrelid: 索引所属的表的 OID。 indnatts: 索引中的列数。 indisunique: 表示索引是否唯一(true 或 false)。 indisprimary: 表示索引是否是主键索引(true 或 false)。 indisexclusion: 表示索引是否用于排他性约束(true 或 false)。 indimmediate: 表示索引是否是立即约束检查的一部分(true 或 false)。 indisclustered: 表示索引是否用于聚簇表(true 或 false)。 indisvalid: 表示索引是否有效(true 或 false)。 indcheckxmin: 表示索引的元组是否在事务中被 xmin 检查。 indisready: 表示索引是否已准备好使用(true 或 ...
PostgreSQL pg_foreign_table
pg_foreign_table 是 PostgreSQL 系统目录表之一,用于存储外部表的信息。外部表是通过外部数据封装器(Foreign Data Wrapper,FDW)在 PostgreSQL 中创建的表,实际上是对外部数据源的引用。以下是 pg_foreign_table 表的一些关键列: ftrelid: 外部表的 OID(对象标识符)。 ftserver: 外部表关联的外部服务器的 OID。 ftoptions: 与外部表关联的选项的数组,包含了访问外部数据源所需的配置信息。外部表允许在 PostgreSQL 中查询和操作外部数据源的数据,而无需将数据复制到本地数据库。外部表的定义通常包括表的列和类型信息,以及指定与外部服务器通信所需的选项。要查看当前数据库中已创建的外部表,可以执行如下查询:SELECT * FROM pg_foreign_table;创建外部表的一般步骤如下:1. 创建外部数据封装器:使用 CREATE FOREIGN DATA WRAPPER 语句创建外部数据封装器。 CREATE FOREIGN DATA WRAPPER your_fdw_na...
PostgreSQL pg_foreign_server
pg_foreign_server 是 PostgreSQL 系统目录表之一,用于存储外部服务器的信息。在 PostgreSQL 中,外部服务器是外部数据源的表示,通过外部数据封装器(Foreign Data Wrapper,FDW)实现。外部服务器用于与外部数据源通信,并在数据库中创建外部表以引用这些外部数据。以下是 pg_foreign_server 表的一些关键列: oid: 外部服务器的唯一标识符(对象标识符)。 srvname: 外部服务器的名称。 srvowner: 外部服务器的所有者(用户的 OID)。 srvfdw: 与外部服务器关联的外部数据封装器的 OID。 srvtype: 外部服务器的类型。 srvversion: 外部服务器的版本信息。 srvacl: 外部服务器的访问控制列表(ACL)。外部服务器用于在 PostgreSQL 中定义与外部数据源的连接,以便进行查询和访问。通常,创建外部服务器的过程是与创建外部数据封装器、用户映射和外部表一起完成的。以下是创建外部服务器的基本步骤:1. 创建外部数据封装器:使用 CREATE FOREIGN DATA WRAP...
PostgreSQL pg_foreign_data_wrapper
pg_foreign_data_wrapper 是 PostgreSQL 系统目录表之一,用于存储外部数据封装器(Foreign Data Wrapper,FDW)的信息。外部数据封装器是一种 PostgreSQL 扩展,允许数据库访问和查询外部数据源,如其他数据库、文件系统或 Web 服务。以下是 pg_foreign_data_wrapper 表的一些关键列: oid: 外部数据封装器的唯一标识符(对象标识符)。 fdwname: 外部数据封装器的名称。 fdwowner: 外部数据封装器的所有者(用户的 OID)。 fdwhandler: 与封装器关联的处理程序函数的 OID。 fdwvalidator: 与封装器关联的验证函数的 OID。 fdwacl: 外部数据封装器的访问控制列表(ACL)。使用外部数据封装器,你可以在 PostgreSQL 数据库中创建外部表,这些表实际上是对外部数据源的引用。这使得可以通过 SQL 查询来访问外部数据,就好像它是本地数据库中的表一样。以下是创建外部数据封装器的基本步骤:1. 创建外部数据封装器:使用 CREATE FOREIGN DATA...
PostgreSQL pg_extension
pg_extension 是 PostgreSQL 系统目录表之一,用于存储关于扩展(extension)的信息。在 PostgreSQL 中,扩展是一种模块化的方式,允许用户将额外的功能添加到数据库系统中,而无需修改核心代码。以下是 pg_extension 表的一些关键列: oid: 扩展的唯一标识符(对象标识符)。 extname: 扩展的名称。 extnamespace: 扩展所属的命名空间(通常是 pg_catalog)。 extowner: 扩展的所有者(用户的 OID)。 extrelocatable: 表示扩展是否是可移植的,即是否可以在不重新编译的情况下移植到其他 PostgreSQL 安装。 extversion: 扩展的版本号。 extconfig: 与扩展相关联的配置文件的 OID。 extcondition: 与扩展相关联的条件的 OID。要查看当前数据库中已安装的扩展列表,可以执行如下查询:SELECT * FROM pg_extension;要创建一个扩展,你通常会使用 CREATE EXTENSION 语句,该语句会处理创建扩展所需的许多步骤,包括加载相...
PostgreSQL pg_event_trigger
pg_event_trigger是PostgreSQL系统目录表之一,用于存储事件触发器的信息。事件触发器允许在数据库中特定事件发生时执行用户定义的函数。以下是pg_event_trigger表的一些关键列: evtname: 事件触发器的名称。 evtevent: 事件触发器关联的事件类型。 evtfoid: 事件触发器函数的OID(对象标识符)。 evtenabled: 事件触发器的启用状态,可以是 "O"(禁用)或 "A"(启用)。 evttags: 事件触发器关联的事件标签。 evttwhen: 事件触发器的触发时机,可以是 "BEFORE"(事件之前触发)或 "AFTER"(事件之后触发)。通过使用事件触发器,用户可以在数据库中监视和响应各种事件,如DDL(数据定义语言)和DML(数据操作语言)操作。创建和管理事件触发器的一般步骤如下:1. 创建事件触发器函数:定义一个函数,该函数将在特定事件发生时执行。该函数应接受合适的参数,以便处理触发事件时提供的信息。 CREATE FUNCTION y...
PostgreSQL pg_enum
pg_enum是PostgreSQL系统目录表之一,用于存储枚举类型的值。在PostgreSQL中,枚举类型是一种用户定义的数据类型,它表示有限集合的静态数据。以下是pg_enum表的一些关键列: oid: 枚举值的唯一标识符(对象标识符)。 enumtypid: 枚举类型的OID,与pg_type表中的相应类型的OID相对应。 enumsortorder: 枚举值的排序顺序,用于确定在结果集中的显示顺序。 enumlabel: 枚举值的标签或名称。枚举类型的主要目的是为用户提供一种在应用程序中使用一组预定义的符号名称来表示离散的值的方法。例如,可以创建一个表示颜色的枚举类型,并为其定义预定义的颜色值:CREATE TYPE color AS ENUM ('red', 'green', 'blue');然后,pg_enum表中将包含与此枚举类型相关的值:SELECT * FROM pg_enum WHERE enumtypid = 'your_enum_type'::regtype;这将返回与指定枚举类型相关的所有值及其排...
PostgreSQL pg_description
pg_description是PostgreSQL系统目录表之一,用于存储数据库对象的描述信息。它允许用户为数据库中的表、列、函数等对象添加文本描述,以提供更多的说明和注释。以下是pg_description表的一些关键列: objoid: 表示被描述对象的OID(对象标识符)。 classoid: 是对象所属类型的OID,可以通过查询其他系统表(如pg_class)获得对象类型的详细信息。 objsubid: 表示对象的子对象,如果对象没有子对象,则为0。 description: 是包含对象描述文本的字段。通过在pg_description表中添加描述,用户可以更好地记录和理解数据库中的各种对象。例如,可以为表添加描述,说明表的用途或设计考虑,也可以为列、函数等其他对象添加描述。以下是一个示例,说明如何向pg_description表添加描述:-- 为表添加描述COMMENT ON TABLE your_table_name IS 'This table stores information about...';-- 为列添加描述COMMENT ON COLUMN ...