Postgresql用户权限笔记

本文介绍了如何在PostgreSQL中创建用户与角色,并为这些用户分配登录权限及表级的操作权限。同时,还讲解了模式的概念及其在数据库中的作用。
用户与权限:
CREATE USER test WITH PASSWORD 'test';
CREATE DATABASE testdb OWNER test;
建用户和角色
CREATE USER my_user;
CREATE ROLE my_role;

用户可以登录
psql -U my_user -d postgres

角色不能登录,以下语句会报错
psql -U my_role -d postgres
需要给角色赋登录权限
ALTER my_role WITH login;

GRANT ALL ON emp TO my_user;
GRANT SELECT ON emp TO my_role;
GRANT INSERT ON emp TO myuser;

查看用户的权限:
SELECT pu.usename,pc.tb1,pc.privilege_type 
FROM pg_user pu 
JOIN (SELECT oid::regclass tb1, (aclexplode(relacl)).grantee, (aclexplode(relacl)).privilege_type
  FROM pg_class 
  WHERE relname='emp'
)pc
ON  pc.grantee = pu.usesysid;

============================================
模式:一个容器或者数据库内的一个命名空间。
在数据库中创建的任何一个对象(例如表、索引、视图等)都会在一个模式下创建。

CREATE SCHEMA myschema;

CREATE TABLE myschema.emp(id int,name text);

向emp表插入数据时,需要先将myschema添加到search_path
SET search_path="$user",public,myschema;

SHOW search_path;
模式的顺序是非常重要的,假如两个模式中有相同的表,默认操作前面的模式中的表。



<think>我们正在为用户整理一份详细的PostgreSQL学习笔记。根据引用内容,我们可以构建一个结构化的学习笔记框架,涵盖核心概念、管理维护、性能优化、安全权限、对比迁移等方面。以下是根据引用内容整理的笔记大纲: ### 一、PostgreSQL概述 1. **简介**:开源关系型数据库,支持高级数据类型和复杂查询 2. **架构特点**:多进程架构(Postmaster主进程 + 后端进程)[^2] 3. **核心优势**:ACID兼容、可扩展性、支持JSON等 ### 二、查询处理流程 1. **解析阶段**:词法/语法分析生成原始解析树[^2] - 简写命令转换(如`\dt`→SELECT语句) 2. **重写阶段**:规则系统转换解析树为查询树 - 视图展开 - 规则应用 3. **计划/执行阶段**:查询树→最优执行计划 ### 三、数据库管理 #### 1. 日常维护 ```sql -- 示例:表空间管理 CREATE TABLESPACE fastspace LOCATION '/ssd1'; ``` #### 2. 备份恢复 - 逻辑备份:`pg_dump`/`pg_dumpall` - 物理备份:PITR技术 ### 四、性能优化 1. **索引策略** - B-tree索引(默认) - GIN索引(JSON/数组) ```sql CREATE INDEX idx_gin ON orders USING GIN (product_data); ``` 2. **查询优化** - EXPLAIN分析执行计划 - 避免全表扫描 ### 五、安全与权限[^3] 1. **认证方式** - SCRAM-SHA-256 - 证书认证(SSL) 2. **权限控制** ```sql GRANT SELECT ON employees TO analyst; REVOKE UPDATE ON salaries FROM public; ``` 3. **审计方案** - pgAudit扩展 ### 六、高级特性 1. **分区表** - 范围分区(Range) - 列表分区(List) ```sql -- 创建分区表示例 CREATE TABLE measurement ( city_id int not null, logdate date not null, peaktemp int ) PARTITION BY RANGE (logdate); ``` 2. **全文搜索** - TSVECTOR数据类型 - TSQUERY操作符 ### 七、部署方案[^3] 1. **容器化部署** - CrunchyData PGO(Kubernetes) 2. **高可用方案** - Patroni流复制集群 ### 八、对比迁移 1. **与Oracle对比** - 分区表实现差异 - PL/SQL vs PL/pgSQL 2. **MySQL迁移** - 工具:pgLoader - 数据类型转换 §§相关问题§§ 1. PostgreSQL的WAL机制如何保证数据可靠性? 2. 如何实现PostgreSQL的读写分离? 3. PostgreSQL中JSONB与JSON的区别是什么? 4. 解释MVCC在PostgreSQL中的工作原理</think>### PostgreSQL 详细学习笔记整理 #### 一、核心架构与查询流程 1. **多进程架构** PostgreSQL 采用主进程(`Postmaster`)管理多个后端进程(每个客户端连接对应一个独立进程)[^2]。 **优势**:隔离性好,单进程崩溃不影响整体服务。 2. **查询处理流程** ```mermaid graph LR A[用户查询] --> B[词法/语法分析] B --> C[原始解析树] C --> D[规则重写] D --> E[查询树] E --> F[优化器生成计划树] F --> G[执行器返回结果] ``` - 简写命令(如`\dt`)会先转换为标准 `SELECT` 语句[^2]。 - 重写阶段处理视图展开、规则优化等。 --- #### 二、管理维护实践 1. **数据库对象管理** ```sql -- 表空间管理(SSD优化) CREATE TABLESPACE fastspace LOCATION '/ssd1'; CREATE TABLE logs (id SERIAL) TABLESPACE fastspace; ``` 2. **备份与恢复** | 类型 | 命令 | 特点 | |------------|--------------------|--------------------------| | 逻辑备份 | `pg_dump dbname` | 可跨版本恢复 | | 物理备份 | `pg_basebackup` | 支持PITR(时间点恢复) | --- #### 三、性能优化关键点 1. **索引策略** - **B-tree**:默认索引(`WHERE col = val`) - **GIN**:JSON/数组查询(`WHERE data @> '{"key":1}'`) - **BRIN**:大范围数据(时序表) 2. **查询优化示例** ```sql EXPLAIN ANALYZE SELECT * FROM orders WHERE amount > 1000; -- 检查是否走索引 CREATE INDEX idx_orders_amount ON orders(amount); -- 添加缺失索引 ``` --- #### 四、安全与权限控制[^3] 1. **认证方式** - `scram-sha-256`(推荐密码加密) - 证书认证(`ssl = on`) 2. **权限分级** ```sql REVOKE ALL ON DATABASE prod FROM public; -- 关闭默认权限 GRANT SELECT, INSERT ON table1 TO analyst; -- 按角色授权 ``` 3. **审计方案** ```sql CREATE EXTENSION pgaudit; -- 安装审计插件 ALTER SYSTEM SET pgaudit.log = 'all'; -- 记录所有操作 ``` --- #### 五、高级特性与应用 1. **分区表实践** | 类型 | PostgreSQL | Oracle | |------------|-------------------------------------|-------------------------| | 语法 | `PARTITION BY RANGE (logdate)` | `PARTITION BY RANGE` | | 管理 | 自动创建子分区 | 需手动管理 | 2. **JSON 处理** ```sql SELECT data->>'name' FROM users WHERE data @> '{"age": 30}'; -- 检索JSON字段 ``` --- #### 六、部署与迁移 1. **云原生方案** - **Kubernetes 部署**:使用 `CrunchyData PGO` 管理容器化实例[^3] - **注意**:解决 `pg` 容器的 `root` 权限风险 2. **MySQL 迁移步骤** ```bash pgloader mysql://user@source/db postgresql://user@target/db # 自动转换数据类型 ``` --- #### 七、职业发展路径[^1] 1. **DBA 核心技能** - 备份恢复策略设计 - 性能调优(`EXPLAIN`, `pg_stat_statements`) - 高可用方案(流复制、Patroni) 2. **开发者重点** - PL/pgSQL 存储过程开发 - 扩展开发(C语言) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值