PostgreSQL 数据库基础一览表

PostgreSQL 数据库的结构

我来给你把这个 PostgreSQL 数据库的结构和每个部分的作用讲清楚,按层级拆解👇


一、最上层:db_name(你的数据库名)

这是你当前连接的 PostgreSQL 数据库实例,PostgreSQL 里一个服务下可以有多个独立数据库,xin 就是其中之一,你的所有数据、表、视图等都存在这个数据库里。


二、information_schema(信息模式)

这是一个标准 SQL 定义的系统视图集合,相当于数据库的 "元数据说明书",用来以标准化方式查询数据库对象信息,不依赖 PostgreSQL 特定语法,跨数据库兼容。

表格

子项 说明
tables 包含当前数据库中所有表(包括系统表和用户表)的信息,比如表名、所属模式、创建时间等
views 包含所有视图(虚拟表)的定义信息,比如视图名、定义 SQL 语句
routines 包含所有存储过程、函数的信息,比如函数名、参数、返回类型
object types 包含数据库中自定义数据类型的信息

核心用途 :写跨数据库兼容的 SQL 查询时,优先用它来查元数据,比直接查 pg_catalog 更通用。


三、pg_catalog(PostgreSQL 系统目录)

这是 PostgreSQL 自己的核心系统表 / 视图集合,相当于数据库的 "操作系统内核",存储了数据库运行所需的所有元数据、配置和内置对象,是 PostgreSQL 专用的。

表格

子项 说明
tables PostgreSQL 内置的系统表(如 pg_classpg_namespace),是数据库元数据的物理存储载体
views 基于系统表构建的系统视图,方便查询元数据(如 pg_tablespg_views
routines PostgreSQL 内置的所有函数、存储过程(比如字符串函数、聚合函数、类型转换函数等),你看到的 3129 个就是系统自带的
aggregates 内置的聚合函数(如 sum()count()avg() 等),共 157 个
operators 内置的运算符(如 +-=LIKE 等),以及运算符对应的实现逻辑,共 799 个
object types PostgreSQL 内置的数据类型(如 inttexttimestamp 等),共 68 个
collations 排序规则(比如中文排序、大小写敏感规则),共 858 个,影响字符串比较和排序
operator classes / operator families 索引操作符类 / 族,定义不同索引(如 B 树、哈希)如何处理运算符,是索引优化的底层逻辑

核心用途:PostgreSQL 数据库的核心依赖,系统正常运行离不开它;DBA 排查问题、优化性能时,经常会直接查询这里的系统表。


四、public(默认用户模式)

这是你创建数据库时默认存在的用户模式(Schema),也是绝大多数用户对象的存放地,你的业务表、自定义函数等都在这里。

表格

子项 说明
tables 你自己创建的业务表(共 31 个),是存储业务数据的核心载体
routines 你自定义的函数、存储过程(共 109 个),用来封装业务逻辑
operators 你自定义的运算符(共 59 个,很少用,一般是高级扩展或自定义类型才会用到)
sequences 序列对象(共 28 个),通常用来给表的主键生成自增 ID,比如 SERIAL/IDENTITY 列底层就是用它实现的
object types 你自定义的数据类型(共 5 个),比如枚举类型、复合类型
operator classes / operator families 你自定义的索引操作符类 / 族(共 5 个,一般是用扩展或自定义索引时才会创建)

核心用途:存放你所有的业务相关数据库对象,是你开发和维护的重点区域。


五、Database Objects(数据库级对象)

这是数据库层面的全局对象,不属于某个特定模式,是整个数据库实例共享的配置和扩展。

表格

子项 说明
access methods 访问方法(共 7 个),也就是 PostgreSQL 支持的索引类型,比如 B 树、哈希、GIN、GiST 等
casts 类型转换规则(共 229 个),定义不同数据类型之间如何自动 / 手动转换,比如 textint
extensions 已安装的扩展(共 3 个),比如 pg_stat_statements(SQL 性能分析)、uuid-ossp(UUID 生成)等,用来给 PostgreSQL 增加额外功能
languages 支持的过程语言(共 4 个),比如 plpgsql(默认存储过程语言)、sqlpythonc
virtual views 虚拟视图(共 1 个,一般是 IDE 或工具生成的,不是数据库原生对象)

核心用途:管理数据库的全局配置、扩展和底层能力,DBA 优化和扩展数据库功能时会用到。


💡 补充:几个关键概念的通俗理解

  1. Schema(模式) :相当于数据库里的 "文件夹",用来把表、函数等对象分组管理,information_schemapg_catalogpublic 都是不同的模式。
  2. 元数据 :描述数据库对象的数据,比如表名、字段类型、索引定义等,information_schemapg_catalog 都是元数据的存储 / 查询入口。
  3. 扩展(extensions) :PostgreSQL 的插件机制,比如安装 pgvector 扩展就能支持向量数据库功能,安装 hstore 就能支持键值对存储。

关于 CREATE POLICY

CREATE POLICY行级安全策略(RLS) ,用来控制哪些用户能查 / 改表里的哪些行,是 PostgreSQL 最常用的权限控制之一。

我用最简单、最实用的方式给你讲清楚👇


一、CREATE POLICY 放在哪里?

1. 必须依附在

策略不属于数据库、不属于模式,只属于某一张表

2. 语法位置

sql

复制代码
-- 标准写法
CREATE POLICY 策略名
  ON 表名
  FOR 操作  -- SELECT/INSERT/UPDATE/DELETE/ALL
  TO 角色/用户  -- 给哪个账号用
  USING (条件);  -- 行过滤条件

3. 它属于哪个模式?

表在哪个 schema,策略就在哪个 schema。比如:

sql

复制代码
CREATE POLICY p_user_select ON public.user_table ...;

这个策略就属于 public 模式下的 user_table 表。


二、最关键:使用前必须先开 RLS

不开行级安全,策略等于白写!

sql

复制代码
-- 开启表的行级安全
ALTER TABLE 表名 ENABLE ROW LEVEL SECURITY;

三、完整示例(直接复制可用)

sql

复制代码
-- 1. 先开启行级安全
ALTER TABLE user_info ENABLE ROW LEVEL SECURITY;

-- 2. 创建策略:普通用户只能看自己的数据
CREATE POLICY user_see_self
  ON user_info
  FOR SELECT
  TO app_user  -- 你的业务用户
  USING (user_id = current_setting('app.user_id')::int);

四、如何查看已有的 POLICY?

方法 1:查系统表(最准)

sql

复制代码
SELECT * FROM pg_policies WHERE tablename = '你的表名';

方法 2:在工具里看

  • DBeaver / Navicat / PGAdmin
  • 展开表 → Security → Policies就能看到所有策略。

五、如何修改 POLICY?(重点)

PostgreSQL 没有 ALTER POLICY 修改内容 的语法!修改策略 = 删除旧的 + 创建新的

标准修改流程:

sql

复制代码
-- 1. 删除旧策略
DROP POLICY IF EXISTS 策略名 ON 表名;

-- 2. 创建新策略(写你改后的逻辑)
CREATE POLICY 策略名
  ON 表名
  FOR SELECT
  TO 角色
  USING (新条件);

六、如果你只想改策略的权限 / 角色

可以用 ALTER POLICY只能改角色,不能改过滤条件

sql

复制代码
ALTER POLICY 策略名 ON 表名 TO 新角色;

七、快速总结(你记这 3 句就够)

  1. CREATE POLICY 必须写在表上
  2. 必须先开 ALTER TABLE ... ENABLE ROW LEVEL SECURITY
  3. 修改策略 = DROP + 重新 CREATE
相关推荐
DBdoctor官方1 小时前
2026 DBA实测推荐:5款数据库管理工具 监控、SQL审核、AI能力横评
数据库·sql·dba
qq_196976171 小时前
硬核项目管理:Gemini境像站驱动的WBS自动分解、关键路径识别与风险登记册生成(国内免费镜像实测)
数据库
迷枫7121 小时前
DM8 读写分离集群学习总结:从部署规划到扩容排查
数据库·学习
yuzhiboyouye1 小时前
聚合与分组统计 (GROUP BY)常用于web前端什么场景中
数据库
AllData公司负责人1 小时前
亲测丝滑,体验跃迁|AllData通过集成开源项目StreamPark,实时流任务调度更省心!
java·大数据·数据库·人工智能·算法·实时计算·实时开发平台
可涵不会debug2 小时前
工业大数据时序数据库选型方法论:核心指标与技术适配分析
大数据·数据库·时序数据库
DolphinDB智臾科技2 小时前
时序数据库国产替代的下一站:从能用到好用,再到敢用作核心
数据库·人工智能·时序数据库
人生苦短1282 小时前
CentOS 7.9 部署 PostgreSQL 15.17 + PostGIS 3.4.8 操作文档
linux·postgresql·centos
阿坤带你走近大数据2 小时前
Hbase的基本概念,基本用法及常见使用场景
大数据·数据库·hbase