Skip to content

数据库对象 详解

PostgreSQL 的每一个核心模式对象 — 结构、表、视图、索引、类型、标识、例程、安全与复制 — 汇总为一份紧凑的参考。

PostgreSQL 把数据存在命名的模式对象里。每个对象只做一件事:表存放行,索引加速查找,例程承载逻辑。先弄清每个对象是什么,再决定添加哪个;把约束和策略当作让数据保持诚实的规则。

参考表格 · 45 条目
45 of 45 rows
结构
集群内一个隔离的目录,装着所有 schema。隔离不应共享数据的应用或环境。
数据库内命名的命名空间,把相关对象分组。按功能或所有者组织对象,避免命名冲突。
磁盘上一个命名的位置,存放表和索引文件。把热表导向快速存储,把冷数据留在廉价磁盘上。
决定不带限定名的对象名解析到哪些 schema 的设置。让会话指向正确的 schema,查询就能使用短名。
用 COMMENT ON 存在任意数据库对象上的描述。把表和列的说明写在下一位查询作者会看到的地方。
表与视图
以带类型的列存放行的命名关系。持久数据的首要容器。
行在会话或事务结束时消失的表。存放不应比连接活得更久的临时或暂存数据。
按声明的键拆分为子分区的父表。按范围或列表把行分配到分区,让超大的表保持可管理。
行存放在外部系统中的表,通过外部数据包装器访问。像查询本地表一样查询远程数据库或文件。
以虚拟表形式呈现的已存储查询。通过不同的过滤或连接呈现同一批行。
把 INSERT、UPDATE 和 DELETE 转发给基表的简单视图。开放表中一个被过滤或连接的切片,同时保持可写。
结果集写入磁盘、按需刷新的视图。缓存昂贵的聚合或连接,然后快速读取。
返回一组行的函数,任何能用表的地方都能用它。就地展开一个计算出的集合,就像 unnest 把数组变成行。
索引
用于等值和范围查找的平衡树索引。加速可排序列上的 WHERE、JOIN 和 ORDER BY。
拒绝键中出现重复值的索引。在单列或多列组合上强制唯一性。
面向非标量值的倒排或通用搜索树索引。为数组、JSONB、全文或几何数据建索引。
只对匹配 WHERE 子句的行建立的索引。只为热的子集建索引,跳过其余部分以节省空间。
类型与扩展
取值来自固定标签列表的用户自定义类型。把列约束成封闭集合,例如状态码。
基础类型加检查约束,命名后作为列类型复用。把一个已验证的定义(如非空 text)共享给多个列。
定义字符串如何比较和排序的规则集。为大小写、重音或特定区域设置获得正确的排序。
可安装的包,为数据库添加函数、类型或运算符。一步采用经过验证的工具,如 PostGIS 或 pg_trgm。
标识与生成列
独立的计数器对象,产出连续的整数。当多个表共用一个生成器时,为序列号键供值。
由内部序列支撑的表列,符合 SQL 标准。现代的自增主键,优于 SERIAL。
值由同一行中其他列计算得出的列。无需手动写入即可存储或呈现派生值。
例程
返回值或行的命名 SQL 块。封装可复用的逻辑,并在查询中调用。
执行动作并自行控制事务的命名块。例程内部自行提交或回滚的多步 ETL。
通过状态函数和最终函数把多个输入行折叠成一个值的例程。定义自定义归约,例如加权平均值。
绑定到一个或多个函数、面向特定操作数类型的符号。让你自己的类型拥有自然语法,如 a + b 或 @>。
从一个类型到另一个类型的已声明转换路径。控制值如何变更类型,包括哪些转换隐式发生。
绑定到表事件、自动触发的例程。在 INSERT、UPDATE 或 DELETE 时审计、校验或级联变更。
在数据库级事件(如 DDL 命令)上触发的触发器。在整个数据库范围内记录、阻止或审计模式变更。
解析后存储、以绑定参数反复执行的查询。让同一次解析和计划在多次执行中复用。
让结果集保持打开、供逐行取用的句柄。对大型结果分页,或在例程内逐行遍历。
安全与规则
持有权限的命名身份;能登录的 role 就是用户。一次性归组权限,再授予人员、服务或其他角色。
把对象上的权限授予角色或移除的语句。决定哪个角色能读、写或执行每个对象。
创建者修改或删除对象的内置权利,独立于授权。指明对对象生命周期负责的角色。
对角色之后创建的对象自动授予权限的常设指令。预先设好权限,新表无需为应用角色手工授权。
拒绝违反已声明条件写入的规则。强制 NOT NULL、CHECK、UNIQUE、PRIMARY KEY 和 FOREIGN KEY 的保证。
按角色隐藏会话不应看到的行的规则。无需改写应用查询即可实现租户隔离或按用户控制访问。
把一个名称解析到别处对象的别名;Oracle 和 SQL Server 原生支持。移植模式布局;在 PostgreSQL 中改用 search_path。
定义哪些动作会被记录以备审查,经由 pgaudit 或厂商工具。为合规与调查证明谁读改了什么。
把到来的查询改写成另一条命令的指令。旧式的写入重定向;PostgreSQL 现在更倾向触发器或可更新视图。
复制
发送端对哪些表和变更类型流向副本的定义。声明数据库向逻辑复制的订阅者提供什么。
连接到发布并将其变更应用到本地表的接收端。把另一个 PostgreSQL 数据库的变更拉取到这一个。
让主库保留 WAL 直到消费者读完的标记。保证备用库或订阅者可以续传而不丢失变更。